暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ASP.NET Core 基础知识之​Startup 类配置

121

Startup
 类配置服务和应用的请求管道。


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

1.可选择性地包括 ConfigureServices 方法以配置应用的服务 。 服务是一个提供应用功的可重用组件。 在 ConfigureServices
 中注册服务,并通过依赖关系注(DI) 或 
Application-Services 在整个应用中使用服务 。

2.包括 Configure 方法以创建应用的请求处理管道。

在应用启动时,ASP.NET Core 运行时会调用 ConfigureServices
 和 Configure

方法调用顺序: Main -> ConfigureServices -> Configure

 public class Startup

{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}

public IConfiguration Configuration { get; }

在 ConfigureServices 中注册服务,并通过依赖关系注入 (DI) 或 ApplicationServices 在整个应用中使用服务
public void ConfigureServices(IServiceCollection services)
{

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

Configure 方法用以创建应用的请求处理管道。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseMvc();
}

}

ConfigureServices 方法:

ConfigureServices 方法:

1.可选。

2.在 Configure
方法配置应用服务之前,由主机调用。

3.其中按常规设置配置选项。


对于需要大量设置的功能,IServiceCollection 上有 Add{Service}
 扩展方法。
 例如,AddDbContext、AddDefaultIdentity、AddEntityFrameworkStores 和 AddRazorPages等方法:

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

    }

}

执行到Startup的时候,IConfiguration已经被注入到services了,不需要我们额外添加注入

的代码,但是缺少读取appsettings.json文件,你可以理解在Startup.cs里有隐藏的注入代码

类似如下:



    var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables();
    Configuration = builder.Build();
    services.AddSingleton<IConfiguration>(Configuration);

    我们可以使用

    使用IOptions,获取appsetting.json配置文件中的值

    例如:appsetting.json中数据为:

    {

      "key1": "KeyVule1",

      "key2": "KeyVule2"

    }

    1. 创建appsetting.json对应的类:












      public class appModel
      {
      public string key1 { get; set; }
      public string key2 { get; set; }
      }








          

      2.在 ConfigureServices中注册相应的服务:

      services.Configure<appModel>(Configuration);

      3.在你想要使用的控制器的构造函数中传递参数:

        [Route("api/[controller]")]

          [ApiController]

          public class ValuesController : ControllerBase

          {

              public IOptions<appModel> _options;


              public ValuesController(IOptions<appModel> options)

              {

                  _options = options;

              }


              GET api/values

              [HttpGet]

              public ActionResult<IEnumerable<string>> Get()

              {

                  return new string[] { _options.Value.key1, _options.Value.key2 };

              }

          }

      Configure 方法

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

      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 扩展方法将一个或多个中间件组件添加到请求管道。例如,UseStaticFiles 配置中间件提供静态文件。


      请求管道中的每个中间件组件负责调用管道中的下一个组件,或在适当情况下使链发生短路。

      可以在 Configure 方法签名中指定其他服务,如 IWebHostEnvironment、ILoggerFactory 或 ConfigureServices

      中定义的任何内容。如果这些服务可用,则会被注入。

      下章介绍ASP.NETCORE中间件。

      复制

      文章转载自springboot葵花宝典,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论