asp.net core 2.0 一些有用有趣的设置.

面向(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的Name

Rest, 它是一种http协议的最佳实践方式而已. 主要目的是管理和控制资源.

HATEOAS, 客户端通过遍历http response里面的超媒体链接, 可以动态导航到所需的资源, 酷.

使用HATEOAS, 需要安装包Halcyon.mvc

asp.net core 2.0 查缺补漏的更多相关文章

  1. Android查缺补漏(View篇)--在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0?

    在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0 ? @Override protected void onCreate(Bundle savedInstanc ...

  2. 跨平台运行ASP.NET Core 1.0

    前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为  ...

  3. 跨平台运行ASP.NET Core 1.0(转载)

    前言 首先提一下微软更名后的叫法: ASP.NET 5 更名为 ASP.NET Core 1.0 .NET Core 更名为 .NET Core 1.0 Entity Framework 7 更名为  ...

  4. Amazing ASP.NET Core 2.0

    前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着 ...

  5. ASP.NET Core 2.0 使用支付宝PC网站支付

    前言 最近在使用ASP.NET Core来进行开发,刚好有个接入支付宝支付的需求,百度了一下没找到相关的资料,看了官方的SDK以及Demo都还是.NET Framework的,所以就先根据官方SDK的 ...

  6. [译]ASP.NET Core 2.0 会话状态

    问题 如何在ASP.NET Core 2.0中存储会话状态? 答案 创建一个空项目,修改Startup类的ConfigureServices()方法,添加会话状态服务和它后台的存储服务: public ...

  7. [译]ASP.NET Core 2.0 路由引擎

    问题 ASP.NET Core 2.0的路由引擎是如何工作的? 答案 创建一个空项目,为Startup类添加MVC服务和请求中间件: public void ConfigureServices(ISe ...

  8. [译]ASP.NET Core 2.0 视图组件

    问题 如何在ASP.NET Core 2.0中使用视图组件? 答案 新建一个空项目,修改Startup类并添加MVC服务和中间件: public void ConfigureServices(ISer ...

  9. Android查缺补漏--ContentProvider的使用

    ContentProvider (内容提供者)是一种共享型组件,可以为系统内应用于与应用之间提供访问接口. ContentProvide要想正常工作需要三个关键点: ContentProvider:对 ...

随机推荐

  1. java 中Map 使用

    Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复.所以通过指定的key就可以取出对应的value.Map接口定义了如下常用 ...

  2. 19_Android中图片处理原理篇,关于人脸识别站点,图片载入到内存,图片缩放,图片翻转倒置,网上撕衣服游戏案例编写

    1载入图片到内存 (1).数码相机照片特别是大于3m以上的,内存吃不消,会报OutOfMemoryError,若是想仅仅显示原图片的1/8,能够通过BitmapFactory.Options来实现.详 ...

  3. Python - 首字母大写(capwords) 和 创建转换表(maketrans) 具体解释

    首字母大写(capwords) 和 创建转换表(maketrans) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27 ...

  4. 字符串函数---atof()函数具体解释及实现(完整版)

    atof()函数 atof():double atof(const char *str ); 功 能: 把字符串转换成浮点数 str:要转换的字符串. 返回值:每一个函数返回 double 值.此值由 ...

  5. One-Based Arithmetic

    One-Based Arithmetic time limit per test 0.5 seconds memory limit per test 256 megabytes input stand ...

  6. freemarker常见语法大全

    推荐freemarker系列教程:http://swiftlet.net/archives/category/freemarker FreeMarker的插值有如下两种类型:1,通用插值${expr} ...

  7. mango(mango ORM框架介绍)

    官网地址:http://www.jfaster.org/ mango的中文名是"芒果",它是一个极速分布式ORM框架.目前已有十多个大型线上项目在使用mango,在某一支付系统中, ...

  8. Safari不能连接到服务器

    系统偏好设置-网络-高级-代理,把"网页代理"和"安全网页代理"两个复选项去掉,最下面"使用被动FTP模式"复选项保留,即可解决!

  9. Node: 如何控制子进程的输出

    大家知道,在一个node程序中,如果当前进程想要生成一个子进程,它可以调用child_process模块的spawn方法.spawn方法签名如下: child_process.spawn(comman ...

  10. 创建access数据库表demo的封装

    1.创建类 public void CreateBiao(ADOX.Catalog catlog,ADOX.Table table) { //StuId Column(AutoIncrement ) ...