小工具知识网

当前位置: 首页 > 行业知识 > ASP.NET Core 的 WebApplication 类和 WebApplicationBuilder 类

行业知识

ASP.NET Core 的 WebApplication 类和 WebApplicationBuilder 类

2026-11-14 11:28:34 来源:互联网转载

WebApplication 类

ASP.NET Core 有3个 Host 类,是ASP.NET Core中用于初始化,生命周期管理,启动Web 服务的最重要的类。所以详细重点分析一下这几个类,分别是:

  • WebApplication,ASP.NET Core 6 引入的替代WebHost的类,可以用于 Web App或者 Web API
  • Host,非 Web App或者Web API 使用的 Host 类,比如纯控制台,或者 Windows Service。
  • WebHost,ASP.NET Core 6之前的版本使用的Host类。此处不再学习。

    2个静态方法

    • CreateBuilder(),用于创建WebApplicationBuilder 对象,再用 Build 模式添加一些中间件,再创建WebApplication对象。
    • Create(),用于直接创建一个WebApplication对象,会默认添加和配置一些中间件。

      使用CreateBuilder的例子代码:

      var builder = WebApplication.CreateBuilder(args);var app = builder.Build();app.MapGet("/", () => "Hello World!");app.Run();

      直接创建一个WebApplication对象的例子代码:

      var app = WebApplication.Create(args);app.MapGet("/", () => "Hello World!");app.Run();

      然后再用 Run()方法启动Web服务。包括 Run(),共有3个方法启动Web服务,区别是:

      • Run(),阻塞当前线程,直到 Host 关闭。
      • RunAsync(),启动 Host 的 Task,只有当 token 或者 shutdown 被触发时才会完成此。
      • StartAsync(),启动 Host的 Task,启动成功后立即返回 Task,然后 HTTP Server 可以接收 HTTP Request 。

        其他的扩展方法

        • UseRequestLocalization(),使用 RequestLocalizationMiddleware 中间件,根据客户端的 http 请求自动设置语言。
        • UseAuthentication(),使用 AuthenticationMiddleware 中间件,开启身份验证功能。
        • UseAuthorization(),使用 AuthorizationMiddleware 中间件,开启权限验证功能,必须用于app.UseRouting() 与 app.UseEndpoints(…)之间。
        • UseCertificateForwarding(),验证来自客户端请求的 Header 中的证书,然后更新在HttpContext.Connection.ClientCertificate中。
        • UseConcurrencyLimiter(),使用ConcurrencyLimiterMiddleware 中间件,限制并发请求数。
        • MapConnectionHandler(),将特定路径的请求映射到某个 pipeline。
        • MapConnections(),同上。
        • MapAreaControllerRoute(),为controller映射endpoints,并指定路由。
        • MapControllers(),为controllerr映射endpoints,但不指定路由。
        • MapDefaultControllerRoute(),为controllerr映射endpoints,并使用默认路由{controller=Home}/{action=Index}/{id?}。
        • MapDynamicControllerRoute(),为controllerr映射特定的 Route endpoints
        • MapFallbackToAreaController(),为controllerr映射特定的 Route endpoints
        • UseCookiePolicy(),使用CookiePolicyMiddleware 中间件,开启 Cookie策略功能。
        • UseCors(),使用CORS中间件,开启跨域功能。
        • UseDefaultFiles(),开启默认的文件映射功能。
        • UseDeveloperExceptionPage(),在开发环境下生成 exception 的 htmld页面。
        • UseDirectoryBrowser(),开启目录浏览功能。
        • UseFileServer(),使用静态文件中间件,映射request 路径到我们预设的其他路径,但不包含DirectoryBrowser功能。
        • UseStaticFiles(),使用静态文件中间件。
        • Map(),模式匹配 HTTP 请求,映射到某个endpoint。
        • MapHub(),模式匹配 HTTP 请求,映射到某个Hub。
        • MapDelete(),模式匹配 HTTP Delete请求,映射到某个endpoint。
        • MapGet(),模式匹配 HTTP Get请求,映射到某个endpoint。
        • MapPut(),模式匹配 HTTP Put请求,映射到某个endpoint。
        • MapPost(),模式匹配 HTTP Post请求,映射到某个endpoint。
        • MapGroup(),模式匹配 某个前缀的HTTP 请求,映射到某个endpoint。
        • MapMethods(),模式匹配 某个方法的HTTP 请求,映射到某个endpoint。
        • MapPatch(),模式匹配 HTTP Patch 请求,映射到某个endpoint。
        • MapHealthChecks(),使用某个endpoint提供的HealthChecks功能。
        • UseEndpoints(),使用Endpoints中间件,指定endpoints。
        • UseRouting(),使用路由中间件。
        • UseExceptionHandler(),捕获异常,记录,如果还没有执行 response,则再用预设的另一个 pipeline 执行一次,
        • UseForwardedHeaders(),HTTP代理转发client request 的 header,填充HttpContext。
        • UseHeaderPropagation(),收集header,发给 HttpClient。
        • UseHealthChecks(),使用健康度检查中间件。
        • UseHostFiltering(),过滤 http 请求,无效请求返回400。
        • UseHsts(),使用HSTS,添加Strict-Transport-Security header。
        • UseHttpLogging(),记录 http的 request 和 response。
        • UseW3CLogging(),以 W3C 格式记录 http的 request 和 response。
        • UseHttpMethodOverride(),当限制 client 的 GET或 POST 请求时,可执行其他请求。
        • UseHttpsRedirection(),将 http 请求重定向至 https。
        • UseMigrationsEndPoint(),侦听DefaultPath的请求,然后执行migrations操作。
        • UseMvc(),使用MVC中间件。
        • UseOutputCache(),caching HTTP response。
        • UseResponseCaching(),aching HTTP response。
        • UseOwin(),使用Owin。
        • UseRateLimiter(),限制requests流量。
        • UseRequestDecompression(), 解压缩 HTTP request功能。
        • UseResponseCompression(), 解压缩 HTTP response功能。
        • UseRewriter(),重写某个 url,修改HttpContext。
        • UseRouter(),
        • UseSession(),启用 Session功能。
        • UseSpa(),返回SPA的默认页面。
        • UseSpaStaticFiles(),在 SPA 中使用静态文件。
        • UseStatusCodePages(),当没有 body 时,返回400 and 599。
        • UseMiddleware(),使用自定义中间件。
        • UsePathBase(),提取路径
        • UseWebSockets(),使用WebSockets。
        • UseWelcomePage(),使用WelcomePage。

          6个关键属性

          • Configuration,
          • Environment,
          • Lifetime
          • Logger
          • Services
          • Urls

            Configuration

            读取 Configuration:

            var app = WebApplication.Create(args);var message = app.Configuration["HelloKey"] ?? "Config failed!";app.MapGet("/", () => message);app.Run();

            Environment

            Lifetime

            Logger

            var app = WebApplication.Create(args);app.Logger.LogInformation("The app started");app.MapGet("/", () => "Hello World");app.Run();

            Services

            Resolve Service

            using (var scope = app.Services.CreateScope()){    var sampleService = scope.ServiceProvider.GetRequiredService();    sampleService.DoSomething();}

            Urls

            配置默认EndPoint

            Visual Studio生成的模板代码,会在 Properties/launchSettings.json 文件中将默认EndPoint设置成 http://localhost:5000。

            修改监听端口
            设置证书

            WebApplicationBuilder 类

            WebApplicationBuilder 类使用 Build 模式构建WebApplication对象。

            设置完WebApplication要用的配置后,调用 Build()方法生成 WebApplication 对象。

            6个主要属性

            • Services
            • Environment
            • Configuration
            • Logging
            • Host
            • WebHost

              Services

              注册使用Service:

              var builder = WebApplication.CreateBuilder(args);// Add the memory cache services.builder.Services.AddMemoryCache();// Add a custom scoped service.builder.Services.AddScoped();var app = builder.Build();

              Environment

              修改环境变量:

              var builder = WebApplication.CreateBuilder(args);// Configure JSON logging to the console.builder.Environment.WebRootPath = "webroot";var app = builder.Build();app.MapGet("/", () => "Hello JSON console!");app.Run();

              Configuration

              获取或者修改配置项:

              var builder = WebApplication.CreateBuilder(args);builder.Configuration.AddIniFile("appsettings.ini");var app = builder.Build();

              Logging

              添加日志 provider

              var builder = WebApplication.CreateBuilder(args);// Configure JSON logging to the console.builder.Logging.AddJsonConsole();var app = builder.Build();app.MapGet("/", () => "Hello JSON console!");app.Run();

              Host

              自定义 Host的属性

              var builder = WebApplication.CreateBuilder(args);// Wait 30 seconds for graceful shutdown.builder.Host.ConfigureHostOptions(o => o.ShutdownTimeout = TimeSpan.FromSeconds(30));var app = builder.Build();app.MapGet("/", () => "Hello World!");app.Run();

              WebHost

              自定义 WebHost 的属性

              var builder = WebApplication.CreateBuilder(args);// Change the HTTP server implemenation to be HTTP.sys basedbuilder.WebHost.UseHttpSys();var app = builder.Build();app.MapGet("/", () => "Hello HTTP.sys");app.Run();

上一篇:怎么查看emobile的服务器地址?

下一篇:我无法帮助您获取或提供有关非法或不道德内容的信息。如果您有其他合法且道德的问题,我会很高兴为您提供帮助。