• asp.net core 2.0 查缺补漏


    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

  • 相关阅读:
    关于 java jdk 环境变量的配置
    Jquery ajax 参数 详解
    关于百度world 编辑器改变上传图片的保存路径图片不显示的问题
    asp.net 中日期的格式化显示的方法
    sql server数据库中 smallint, int ,bigint ,tinyint的区别与长度
    create sequence
    INSERT高级应用
    TRUNCATE TABLE
    CREATE DATABASE LINK
    bulk
  • 原文地址:https://www.cnblogs.com/cgzl/p/8253563.html
Copyright © 2020-2023  润新知