• [ASP.NET Core开发实战]基础篇01 Startup


    Startup,顾名思义,就是启动类,用于配置ASP.NET Core应用的服务和请求管道。

    Startup有两个主要作用:

    • 通过ConfigureServices方法配置应用的服务。服务是一个提供应用功能的可重用组件。
    • 通过Configure方法配置应用的请求处理管道(中间件)。

    下面是VS通过ASP.NET Core项目模板生成的Startup类。

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public IConfiguration Configuration { get; }
    
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
        }
    
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
    
            app.UseHttpsRedirection();
            app.UseStaticFiles();
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });
        }
    }
    

    ConfigureServices方法

    ConfigureServices方法:

    • 可选。
    • 在Configure方法配置应用服务之前,由主机调用。
    • 其中按常规设置配置选项。

    IServiceCollection上有很多服务扩展方法,以Add{Service}格式命名,例如AddDbContext、AddDefaultIdentity;因此,约定俗成,在自定义服务时,也要以Add{Service}定义扩展方法。

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public IConfiguration Configuration { get; }
    
        public void ConfigureServices(IServiceCollection services)
        {
    
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));
            services.AddDefaultIdentity<IdentityUser>(
                options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<ApplicationDbContext>();
    
            services.AddRazorPages();
        }
    

    Configure方法

    Configure方法用于指定应用响应HTTP请求的方式。可通过将中间件组件添加到IApplicationBuilder实例来配置请求管道。

    ASP.NET Core内置配置的管道包括:

    • 开发人员异常页
    • 异常处理程序
    • HTTP严格传输安全性(HSTS)
    • HTTPS重定向
    • ASP.NET Core MVC和Razor Pages
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public IConfiguration Configuration { get; }
    
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
        }
    
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }
    
            app.UseHttpsRedirection();
            app.UseStaticFiles();
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });
        }
    }
    

    每个Use扩展方法将一个或多个中间件组件添加到请求管道。因此,自定义中间件组件也要按Use来定义扩展方法。

    请求管道中的每个中间件组件负责调用管道中的下一个组件,或在适当情况下使链发生短路。因此注册中间件时要注意调用顺序,不然会有意想不到的情况出现。

    有关如何使用IApplicationBuilder和中间件处理顺序的详细信息,查看ASP.NET Core中间件。

    不使用Startup的情况下配置服务

    不使用Startup类配置服务,那就需要在创建主机实例时调用ConfigureServices和Configure方法。如下:

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureServices(services =>
                    {
                        services.AddControllersWithViews();
                    })
                    .Configure(app =>
                    {
                        var loggerFactory = app.ApplicationServices
                            .GetRequiredService<ILoggerFactory>();
                        var logger = loggerFactory.CreateLogger<Program>();
                        var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
                        var config = app.ApplicationServices.GetRequiredService<IConfiguration>();
    
                        logger.LogInformation("Logged in Configure");
    
                        if (env.IsDevelopment())
                        {
                            app.UseDeveloperExceptionPage();
                        }
                        else
                        {
                            app.UseExceptionHandler("/Home/Error");
                            app.UseHsts();
                        }
    
                        var configValue = config["MyConfigKey"];
                    });
                });
            });
    }
    
  • 相关阅读:
    python调用go
    manjaro安装qt
    Ubuntu16.04 ROS安装kinect2并获取骨骼数据+配置kinect2_tracker_pd很不专业的博客-程序员宅基地
    Kinect XBOX 360和六轴机械臂的实时映射
    KinectV2.0 VS2019配置记录
    (29条消息) windows下用kinect V2 识别人体骨骼_interstellar-ai的博客-CSDN博客
    Baxter实战:Ubuntu16.04+Kinect2实现动作跟随
    Kinect2和六轴机械臂的实时映射(初步)
    CS395-T: Robot Learning from Demonstration and Interaction
    无需公网IP,远程SSH访问Linux服务器!
  • 原文地址:https://www.cnblogs.com/liang24/p/13289217.html
Copyright © 2020-2023  润新知