• ASP.NET CORE 基础知识(一):概述【上】


    此为系列文章,对MSDN ASP.NET Core 的官方文档进行系统学习与翻译。其中或许会添加本人对 ASP.NET Core 的浅显理解

    原文请参考 MSDN ASP.NET Core

    这篇文章是对一些关键概念的概述,它们可以帮助你理解如何开发ASP.NET Core应用程序。

    Startup类

          在startup类中:

    •    配置了应用程序需要的服务
    •    定义了请求处理管道

          所谓服务,便是app需要用到的一些组件。举个例子,一个日志组件便是一个服务。配置服务(或者说是注册服务)的代码被加在Startup.ConfigureServices方法中。

          而请求处理管道包含一些列的中间件组件。举例来说,一个中间件可能会处理对静态文件的请求,或者将HTTP请求重定向为HTTPS请求。每一个中间件都会在HttpContext对象上进行异步操作,接下来其要么激活请求管道中的下一个中间件,要么终止请求。配置请求处理管道的代码被添加在了 Startup.Configure方法中。

          这里有一个示例的Startup类:

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc()
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    
            services.AddDbContext<MovieContext>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("MovieDb")));
        }
    
        public void Configure(IApplicationBuilder app)
        {
            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseMvc();
        }
    }

             获取更多的信息,请参考:App startup in ASP.NET Core.

          依赖注入(服务)

          ASP.NET Core有一个内建的DI框架,其使得已配置的服务对于应用程序的类来说是可用的。在一个类中获取一个服务实例的一种方式便是创建一个构造函数,并以所需的类型作为此构造函数的参数。构造函数的参数可以是服务类型或者接口。DI系统会在运行时提供具体的服务实例。

          如下是一个类,其使用DI来获取Entity Framework Core上下文对象。高亮显示的那行是构造函数注入的示例:

         

    public class IndexModel : PageModel
    {
        private readonly RazorPagesMovieContext _context;
    
        public IndexModel(RazorPagesMovieContext context)
        {
            _context = context;
        }
        // ...
        public async Task OnGetAsync()
        {
            var movies = from m in _context.Movies
                            select m;
            Movies = await movies.ToListAsync();
        }
    }

         虽然DI是内建的,但其设计为可以使你插入第三方的IoC容器,因而如果你愿意的话,便可以对其进行自定义。

     中间件

            请求处理管道包含一些列的中间件组件。每一个中间件都会在HttpContext对象上进行异步操作,接下来其要么激活请求管道中的下一个中间件,要么终止请求。按照约定,中间件组件通过在Startup.Configure中调用它的UseXXX扩展方法被添加到管道中。举例来说,为了启用对于静态文件的渲染,便会调用UseStaticFiles方法。

           如下示例中,高亮代码配置了请求处理管道:

           

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc()
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    
            services.AddDbContext<MovieContext>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("MovieDb")));
        }
    
        public void Configure(IApplicationBuilder app)
        {
            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseMvc();
        }
    }

           ASP.NET Core包含一组丰富的内建的组件,除此之外,你也可以写自己的自定义组件。

           获取更多的信息,请参考ASP.NET Core Middleware

           宿主

           ASP.NET Core app在Startup类中建立了宿主。宿主是封装了所有app资源的一个对象,比如:

    •       一个HTTP 服务实现
    •       中间件组件
    •       日志
    •       依赖注入
    •       配置系统

         将app所有相互依存的资源包含在一个对象的主要理由便是生命周期管理,在Startup中进行控制并优雅的关闭。

         两种宿主是可用的:Generic Host 以及 Web Host。推荐使用Generic Host,而 Web Host仅仅用于向后兼容。

         创建宿主的代码是在Program.Main中:

         

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

       CreateDefaultBuilder 和 ConfigureWebHostDefaults 用通用选项配置了一个宿主,例如如下所示:

    •    使用Kestrel作为一个Web服务器,并启用了IIS集成。
    •    从 appsettings.jsonappsettings.{Environment Name}.json,环境变量,命令行参数,以及其他配置资源加载配置信息。
    •    向控制台以及调试提供器发送日志输出。

       更多信息,请参考.NET Generic Host

       非Web 情形

       Generic Host允许其他类型的App使用横切( cross-cutting)的框架扩展,例如日志,依赖注入,配置,以及app生命周期管理,获取更多信息,请参考 .NET Generic Host 和 Background tasks with hosted services in ASP.NET Core

     服务器

            一个ASP.NET Core app 使用一个HTTP 服务器实现来监听HTTP请求。服务器将对app的请求适配为一些列的请求特性(request features ),它们被包含在一个HttpContext对象中。对于Windows系统来说,ASP.NET Core 提供了如下的服务器实现:

    •        Kestrel是一个跨平台的Web服务器,Kestrel常常被用在使用IIS的反向代理中。在ASP.NET Core 2.0及后续版本中,Kestrel能够以一个面向公共的边界服务器来运行,其可以直接暴漏给因特网。
    •        IIS HTTP服务器是一个使用IIS的面向Windows的服务器。使用这个服务器,ASP.NET Core app 和 IIS在一个进程中运行。
    •       HTTP.sys是一个面向不与IIS一起使用的Windows系统的服务器

          获取更多信息,请参考:Web server implementations in ASP.NET Core

  • 相关阅读:
    (4.38)sql server中的事务控制及try cache错误处理
    (4.37)sql server中的系统函数
    【3.5】mysql常用开发规则30条
    Linux学习笔记(17)Linux防火墙配置详解
    (5.16)mysql高可用系列——keepalived+mysql双主ha
    mysql online DDL
    (5.3.8)sql server升级打补丁
    python request
    python 模块被引用多次但是里面的全局表达式总共只会执行一次
    Protocol Buffer Basics: Python
  • 原文地址:https://www.cnblogs.com/qianxingmu/p/12360991.html
Copyright © 2020-2023  润新知