Startup类

ASP.NET Core应用使用Startup类,按照约定命名为Startup.Startup类:

  • 可选择性地包括ConfigureServices方法以配置应用的服务。服务是一个提供应用功能的可重用组件。在ConfigureServices中注册服务,并通过依赖关系注入(DI)或ApplicationServices在整个应用中使用服务。
  • 包括Configure方法以创建应用的请求处理管道。
    在应用启动时,ASP.NET Core运行时会调用ConfigureServices和Configure:
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();
            app.UseExceptionHandler("/Error");
            app.UseHsts();
//使用重定向
        app.UseHttpsRedirection();
        //使用静态文件
        app.UseStaticFiles();
		//使用路由
        app.UseRouting();
        app.UseAuthorization();
		//路线绑定
        app.UseEndpoints(endpoints =>
            endpoints.MapRazorPages();
        });

在构建应用主机时指定Startup类。通常在主机生成器上调用

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>();
            });

如果存在开发环境和生产环境,也可以通过指定startup类来设置启动类

 public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                    //webBuilder.UseStartup<Startup>();
                    webBuilder.UseStartup(typeof(StartupDevelopment).GetTypeInfo().Assembly.FullName);                  
                });

查看UseStartup方法

 public static IWebHostBuilder UseStartup(this IWebHostBuilder hostBuilder, string startupAssemblyName);

可以看出指定startup类名就可以了。

ConfigureService方法

  • 可选
  • 在Configure方法配置应用服务之前,由主机调用
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();

对于需要大量设置的功能,IserviceCollection上有Add(service)扩展方法,如:AddDbContext/AddDefaultIdentity等。
这里就是实现依赖注入的关键。
服务通过依赖关系注入或ApplicationService进行解析。

Configure方法

Configure方法用于指定应用程序响应HTTP请求的方式。可通过中间件组件添加到IApplicationBuilder实例来配置请求管道。Configure方法可使用IApplicationBuilder,但未在服务容器中注册。托管创建IApplicationBuilder并将其直接传递到Configure。
ASPNET Core模板配置的管道支持:

  • 开发人员异常页
  • 异常处理程序
  • HTTP严格传输安全性(HSTS)
  • HTTPS重定向
  • 静态文件
  • ASP.NET Core MVC和Razor Pages
    其中
    开发人员异常页是用在开发环境中的。

HTTP严格传输安全协议(HSTS)
根据OWSAP,HTTP严格传输协议(HSTS)是由WEB应用通过使用响应标头指定的选择加入安全增强功能。当支持HSTS的浏览器收到此标头时:

  • 浏览器存储域的配置,阻止通过HTTP发送任何同安。浏览器强制通过HTTPS进行的所有通信。
  • 浏览器阻止用户使用不受信任或无效的证书。浏览器将禁用允许用户暂时信任此类证书的提示。
    在NETCORE 2.1和更高版本通过UseHsts扩展方法实现HSTS。
    重定向
    强制实施HTTPS在ASP.NET Core中
    需用HTTPS
    在生产中ASP.NET Core Web应用使用:
  • HTTPS 重定向中间件(UseHttpsRedirection),用于将HTTP请求重定向到HTTPS
  • HSTS中间件(UseHsts)用于向客户端发送HTTP严格传输安全协议(HSTS)表头。
 public void ConfigureServices(IServiceCollection services)
            services.AddMvc();
            services.AddDbContext<MyContext>(options =>
                options.UseSqlite("Data Source=BlogDemo.db");
            });
            //用于http对https的重定向
            services.AddHttpsRedirection(options =>
                options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
                options.HttpsPort = 5001;
            });
                    Startup类startUp类是应用程序的入口,这个类可以设置配置,并且将应用程序将要使用的服务连接起来。开发人员可以在startup类中配置请求管道,该管道将用于处理应用程序的所有请求。Configure方法用于指定ASP.NET应用程序如何响应每一个HTTP请求。ConfigureService方法可以在IServiceCollection上使用扩展方法来包装乣大量配置细节的Con...
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Ext...
				
1、在Startup.cs页面下,ConfigureServices方法里增加如下代码: public void ConfigureServices(IServiceCollection services) ....... services.AddHttpsRedirection(InitHttpsRedirectionOptions); .......
在安装配置 SSL 证书时,可以使用一种能使数据传输更加安全的Web安全协议,即在服务器端上开启HSTS (HTTP Strict Transport Security)。它告诉浏览器只能通过HTTPS访问,而绝对禁止HTTP方式。 HTTP Strict Transport Security (HSTS) is an opt-in security enhancement that is sp...
当从配置中取设置的变量值的话,可以从appsettings.json/appsettings.Development.json/自定义的类以及环境变量中取 从appsettings.json中获取 public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ICon...
准备用netcore3.1开发一个web应用,主要想简单实现一个精简版的scm软件,暂时想支持核算组织录入、往来单位录入、物料录入、记录单位录入,最终实现订单录入。 2、使用的技术 后端:netcore3.1 前端:angular 其他:sqlite、automapper
tag Helper 主要关注asp开头的html标签 @model ContosoUniversity.Data.PaginatedList<ContosoUniversity.Models.Student> ViewData["Title"] = "Index"; <h2>Index</h2> <a ...