asp.net core 2.0 查缺补漏
2018-01-09 20:37
405 查看
asp.net core 2.0 一些有用有趣的设置.
TargetFramework就是指向的版本. 也可以指向多个.net版本, 那就使用TargetFrameworks, 例如:
编译后, 在bin/debug文件夹下就会有两个文件夹:
program.cs里面都是对于宿主和环境的配置.
在这里, 已经进行了默认的配置.
但是如果你想捕获asp.net core启动时候的错误, 并显示错误页面, 那么:
是否应该监听Microsoft.AspNetCore.Hosting.Server.IServer制定的url(ipv4, v6, hostname, localhost, unix socket), 可以使用:
监听指定的url:
使用ApplicationInsights:
ConfigureServices方法用来注册服务.
Configure方法用来配置请求管道.
添加mvc中间件, 就在ConfigureServices方法里:
使用mvc中间件, 在Configure里:
每次http请求创建一个实例:
只创建一个实例:
如果你不想让容器自动dispose掉服务(容器会自动调用服务的Dispose方法), 那么你应该手动添加服务, 例如:
2. 静态文件中间件
3. 用户验证中间件
4. mvc中间件
1. 直接在Startup里面写
可以使用四个方法: Run, Map, MapWhen, Use.
Run方法直接短路, 返回Response.
Map用于处理分支, 判断请求地址的开头, 为分支添加特定中间件等等
MapWhen也是处理分支, 但是可以控制分支的状态
Use, 可以调用下一个中间件(next.Invoke())或者短路请求.
2. 单独写一个类
然后再写一个extension 方法:
最后在Startup的Configure里调用即可:
url redirection是从服务器端绕了一圈, 然后回到客户端, 客户端收到301或者302之后, 再调用新地址.
url rewriting是服务器端自己完成的, 客户端一无所知.
可以这样来使用Url Rewriting:
但是可以自定义错误页面:
根据环境使用不同的Startup文件:
StartupDevelopment, StartupStaging, StartupProduction.
Rest, 它是一种http协议的最佳实践方式而已. 主要目的是管理和控制资源.
HATEOAS, 客户端通过遍历http response里面的超媒体链接, 可以动态导航到所需的资源, 酷.
使用HATEOAS, 需要安装包Halcyon.mvc
面向(targeting)不同的.net版本:
打开asp.net core 2.0的项目文件: xxx.csproj, 这部分:<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> </PropertyGroup>
TargetFramework就是指向的版本. 也可以指向多个.net版本, 那就使用TargetFrameworks, 例如:
<TargetFrameworks>netcoreapp2.0;net47</TargetFrameworks>
编译后, 在bin/debug文件夹下就会有两个文件夹:
Microsoft.AspNetCore.All
并不是标准的Nuget包, 它不包含任何代码或dll, 它作为一个metapackage, 引用了很多其他的包而已Program.cs
asp.net core 应用其实就是一个控制台应用, 运行了asp.net core相关的库而已.program.cs里面都是对于宿主和环境的配置.
在这里, 已经进行了默认的配置.
但是如果你想捕获asp.net core启动时候的错误, 并显示错误页面, 那么:
.CaptureStartupErrors(true)
是否应该监听Microsoft.AspNetCore.Hosting.Server.IServer制定的url(ipv4, v6, hostname, localhost, unix socket), 可以使用:
.PreferHostingUrls(true)
监听指定的url:
.UseUrls("http://0.0.0.0:5000")
使用ApplicationInsights:
.UseApplicationInsights()
Startup.cs
startup里面是用来预加载/配置服务和中间件的.ConfigureServices方法用来注册服务.
Configure方法用来配置请求管道.
添加mvc中间件, 就在ConfigureServices方法里:
services.AddMvc();
使用mvc中间件, 在Configure里:
app.UseMvc(routes => { routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}"); });
Dependency Injection
每次调用创建一个实例:services.AddTransient<IEmailService, EmailService>();
每次http请求创建一个实例:
services.AddScoped<IEmailService, EmailService>();
只创建一个实例:
services.AddSingleton<IEmailService, EmailService>();
如果你不想让容器自动dispose掉服务(容器会自动调用服务的Dispose方法), 那么你应该手动添加服务, 例如:
services.AddSingleton(new EmailService());
http 请求管道中间件的顺序 最佳实践:
1. 异常处理中间件2. 静态文件中间件
3. 用户验证中间件
4. mvc中间件
创建自定义中间件
有两种方法:1. 直接在Startup里面写
可以使用四个方法: Run, Map, MapWhen, Use.
Run方法直接短路, 返回Response.
Map用于处理分支, 判断请求地址的开头, 为分支添加特定中间件等等
MapWhen也是处理分支, 但是可以控制分支的状态
Use, 可以调用下一个中间件(next.Invoke())或者短路请求.
2. 单独写一个类
public class CommunicationMiddleware { private readonly RequestDelegate _next; public CommunicationMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { await _next.Invoke(context); } }
然后再写一个extension 方法:
public static class CommunicationMiddlewareExtension { public static IApplicationBuilder UseCommunicationMiddleware(this IApplicationBuilder builder) { return builder.UseMiddleware<CommunicationMiddleware>(); } }
最后在Startup的Configure里调用即可:
app.UseCommunicationMiddleware();
app.UseMvc(routes => { routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}"); });
Url Redirection 和 Url Rewriting
他们是不同的.url redirection是从服务器端绕了一圈, 然后回到客户端, 客户端收到301或者302之后, 再调用新地址.
url rewriting是服务器端自己完成的, 客户端一无所知.
可以这样来使用Url Rewriting:
var options = new RewriteOptions() .AddRewrite("NewUser", "/User/Registration/Index", false); app.UseRewriter(options);
异常处理
默认情况下400到599的错误信息都不会显示. 就会显示一个异常页面.但是可以自定义错误页面:
app.UseStatusCodePages("text/plain", "HTTP ERROR: Status Code: {0}");
多个环境
asp.net core 2.0默认先加载appSettings.json, 然后根据环境不同再加载appSettings.{environment}.json. 如果有必要就覆盖或替换一些值.根据环境使用不同的Startup文件:
.UseStartup("AssemblyName")
StartupDevelopment, StartupStaging, StartupProduction.
Web Api的三种风格
RTC, 包含Action的NameRest, 它是一种http协议的最佳实践方式而已. 主要目的是管理和控制资源.
HATEOAS, 客户端通过遍历http response里面的超媒体链接, 可以动态导航到所需的资源, 酷.
使用HATEOAS, 需要安装包Halcyon.mvc
相关文章推荐
- ASP.NET Core 2.0 使用支付宝PC网站支付
- Asp.Net Core 2.0 多角色权限认证
- ASP.NET Core 2.0 支付宝当面付之扫码支付
- Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密
- Centos7+Docker+Jenkins+ASP.NET Core 2.0自动化发布与部署的实现
- Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例
- Asp.Net Core 2.0 生成操作数据库文件需要的文件
- Asp.Net Core 2.0 之旅---AutoFac 仓储泛型的依赖注入
- [译]ASP.NET Core 2.0 带初始参数的中间件
- asp.net core2.0网站的环境搭建和网站部署
- Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了
- [译]ASP.NET Core 2.0 机密配置项
- [译]ASP.NET Core 2.0 网址重定向的方法
- ASP.NET Core 2.0 Preview 1 中贴心的新特性
- 在ASP.NET Core 2.0中使用CookieAuthentication
- [译]ASP.NET Core 2.0 视图组件
- Razor Page–Asp.Net Core 2.0新功能 Razor Page介绍
- [ASP.NET Core 2.0 前方速报].NET Core 2.0.3 已经支持引用第三方程序集了
- 基础教程:上传/下载ASP.NET Core 2.0中的文件
- ASP.NET Core 2.0中的Azure Blob存储