• ASP.NET Core MVC学习笔记(一)


    学习https://www.52abp.com课程的总结,文档是https://www.52abp.com/Wiki。

    一、亮点及特性
    跨平台
    MVC与WebAPI统一的编程模型
    模块化:中间件
    可测试性
    开源
    依赖注入

    二、项目文件

    .csproj是根据编程语言的文档所使用;
    不需要卸载项目就可以编辑项目文件;
    项目文件不包含任何文件夹或文件引用;
    文件系统确定哪些文件和文件夹属于项目。

    TargetFramework:在应用程序中指定你的目标框架;指定目标版本需要用到的TargetFrameworkMoniker(TFM)。
    AspNetCoreHostingModel:指定应用程序的托管形式,InProcess或OutOfProcess。
    InProcess即在IIS工作进程(w3wp.exe)中托管ASP.NET Core应用程序;
    OutOfProcess即将Web请求转发到后端的ASP.NET Core中,而整个应用程序是运行在ASP.NET Core中内置的Kestrel中;
    ASP.NET Core默认采用的是OutOfProcess托管。程序代码是显式声明。

    PackageReference:用于包含对应用程序安装的Nuget包的引用
    Metapackage(综合包)Microsoft.AspNetCore.App本身是没有任何内容的

    CreateDefaultBuilder()执行的一些任务:设置web服务器,加载主机和应用程序配置表信息,配置日志记录

    三、ASP.NET Core进程内(InProcess)托管
    w3wp.exe或iisexpress.exe
    该应用程序托管在IIS工作进程中
    只有一个Web服务器
    从性能角度来看,在进程托管中,优于进程外托管。

    OutOfProcess进程外托管
    dotnet.exe
    kestrel可以用作面向Internet的web服务器,
    kestrel还可以与反向代理服务器结合使用,例如IIS,Nginx或Apache,
    在内部和外部web服务器之间代理请求的损耗。

    四、launchSettings.json
    本地配置相关信息

    appsettings.json

    ASP.NET Core中配置源(顺序正好相反):
    ①appsettings.json,appsettings.{Environment}.json,不同环境下对应不同的托管环境;
    ②User secrets(用户机密);③Environment variables(环境变量);④Command-line arguments(命令行参数)
    访问配置信息:IConfiguration配置接口

    读取方法,先引入IConfiguration 

    private readonly IConfiguration _configuration;
    public Startup(IConfiguration configuration)
    {
         _configuration = configuration;
    }

    在Configure中的app.run()中

    var configVal= _configuration["MyKey"];

    []中为在json里配置的字段名称

    五、中间件
    处理请求和信息的管道。
    可同时被访问和请求;可以处理请求后,然后将请求传递给下一个中间件;可以处理请求后,并使管道短路;可以处理传出响应;中间件是按照添加的顺序执行的.
    所有的请求处理都会在每个中间件组件调用next()方法之前触发,当中间件处理请求并产生响应时,请求流程会在管道开始反向传递,所有的响应处理都会在每个中间件组件调用next()方法之前触发

     1 app.Use(async (context,next) => {
     2             context.Response.ContentType = "text/plain;charset=utf-8";
     3              logger.LogInformation("MW1:传入请求");
     4             await next();
     5              logger.LogInformation("MW1:传出响应");
     6          });
     7 app.Use(async (context, next) => {
     8              logger.LogInformation("MW2:传入请求");
     9             await next();
    10             logger.LogInformation("MW2:传出响应");
    11          });
    12 app.Run(async (context) =>
    13             {
    14             await context.Response.WriteAsync("MW3:处理请求并生成响应");
    15              logger.LogInformation("MW3:处理请求并生成响应");
    16 });

    显示为

    MW1:传入请求--》MW2:传入请求--》MW3:处理请求并生成响应

    MW3:处理请求并生成响应--》MW2:传出响应--》MW1:传出响应

    六、静态文件
    ASP.NET Core默认不支持静态文件的服务,
    默认的静态服务文件夹为wwwroot
    要使用静态文件,必须使用UseStaticFiles()中间件
    要定义静态文件,必须使用UseDefaultFiles()中间件

    DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions();
    defaultFilesOptions.DefaultFileNames.Clear();
    defaultFilesOptions.DefaultFileNames.Add("index.html");

    //添加默认文件中间件

    app.UseDefaultFiles(defaultFilesOptions);

    //静态文件中间件

    app.UseStaticFiles();

    默认支持的文件列表index.html,index.htm 默认,default.html,default.htm

    UseDefaultFiles()必须注册在UseStaticFiles()前面

    UseFileServer结合了UseDefaultFiles,UseStaticFiles和UseDirectoryBrowser中间件的功能

    FileServerOptions fileServerOptions = new FileServerOptions();            
    fileServerOptions.DefaultFilesOptions.DefaultFileNames.Clear();
    fileServerOptions.DefaultFilesOptions.DefaultFileNames.Add("index.html"); app.UseFileServer(fileServerOptions);

    七、异常是怎么抛出来的

    在管道中使用UseDeveloperExceptionPage启用中间件
    必须尽可能的在管道中提早注入
    异常展示包含Stack Trace,Query String Cookies和HTTP Headers
    用于自定义异常页面,可以使用DeveloperExceptionPageOptions对象

    //显示错误代码处上下行数
    DeveloperExceptionPageOptions developerExceptionPageOptions = new DeveloperExceptionPageOptions();
    developerExceptionPageOptions.SourceCodeLineCount = 10;                
    app.UseDeveloperExceptionPage(developerExceptionPageOptions);

    八、环境变量

    开发环境变量:Development,Staging,Production
    ASPNETCORE_ENVIRONMENT变量可以设置在运行时环境(Runtime Environment)
    开发环境(development),集成环境(integration),测试环境(testing),QA验证,模拟环境(staging),生产环境(Production)
    在开发机器上,我们在launchSettings.json文件中设置环境变量,
    而Staging或者Production的变量,我们尽量在操作系统中设置,
    使用IHostingEnvironment服务访问运行时环境,
    除了标准环境(Development,Staging,Production)之外,还支持自定义环境(UAT,QA)等。

  • 相关阅读:
    springboot配置jsp
    idea项目启动问题
    源码中的设计模式-模板方法模式
    Kafka Eagle CentOS6安装
    源码中的设计模式-静态代理模式
    MySQL主从复制小记
    源码中的设计模式-观察者模式
    源码中的设计模式-单例模式
    Superset
    Hive随记
  • 原文地址:https://www.cnblogs.com/Lvkang/p/11698614.html
Copyright © 2020-2023  润新知