您现在的位置是:首页 > 诗句大全

ASP.NET Core 的 WebApplication 类和 WebApplicationBuilder 类

作者:亙句时间:2024-03-28 16:45:36分类:诗句大全

简介  文章浏览阅读1.2k次。ASP.NET Core 有3个 Host 类,是ASP.NET Core中用于初始化,生命周期管理,启动Web 服务的最重要的类。_webapplication.createbuilder

点击全文阅读

WebApplication 类

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

WebApplication,ASP.NET Core 6 引入的替代WebHost的类,可以用于 Web App或者 Web APIHost,非 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 endpointsMapFallbackToAreaController(),为controllerr映射特定的 Route endpointsUseCookiePolicy(),使用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,LifetimeLoggerServicesUrls

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

Urls

配置默认EndPoint

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

修改监听端口
设置证书

WebApplicationBuilder 类

WebApplicationBuilder 类使用 Build 模式构建WebApplication对象。
设置完WebApplication要用的配置后,调用 Build()方法生成 WebApplication 对象。

6个主要属性

ServicesEnvironmentConfigurationLoggingHostWebHost

Services

注册使用Service:

var builder = WebApplication.CreateBuilder(args);// Add the memory cache services.builder.Services.AddMemoryCache();// Add a custom scoped service.builder.Services.AddScoped<ITodoRepository, TodoRepository>();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();

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

我来说两句