领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

ASP.NET Core 的 WebApplication 类

nixiaole 2025-07-09 16:42:44 知识剖析 3 ℃

ASP.NET Core 提供了 3 个主机类(Host)。这些类用于配置应用、管理生命周期和启动 Web 服务。

  • o WebApplication:ASP.NET Core 6 引入的新 Host 类。它适合 Web 应用或 Web API。
  • o Host:适合非 Web 类型的应用。比如控制台应用或后台服务。
  • o WebHost:ASP.NET Core 6 之前使用的 Host 类。现在不推荐使用。

本文重点介绍 WebApplication 类的功能和用法。


一、WebApplication 类的功能详解

1.1 创建应用程序:CreateBuilder 与 Create 方法

WebApplication 提供两个静态方法来创建应用实例。

CreateBuilder()

这个方法返回一个 WebApplicationBuilder 对象。它支持链式调用添加服务和中间件。最后通过 Build() 方法生成 WebApplication 实例。

var builder = WebApplication.CreateBuilder(args);

// 添加控制器支持
builder.Services.AddControllers();

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Create()

这个方法直接生成一个 WebApplication 实例。默认已经配置了一些中间件。

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

注意:Create() 没有 CreateBuilder() 灵活。建议在简单场景中使用。


1.2 启动方式:Run、RunAsync 与 StartAsync

WebApplication 提供三种方式启动应用。每种适合不同场景。

方法描述Run()阻塞当前线程,直到 Host 关闭。常用于主函数中启动服务。RunAsync()异步启动 Host,直到触发取消令牌或关闭信号。StartAsync()异步启动 Host,启动成功后立即返回。HTTP Server 开始接收请求。

await app.RunAsync(); // 异步启动并等待退出

二、常用扩展方法分类

下面是 WebApplication 常用的扩展方法。按功能分组说明。

2.1 中间件相关

方法说明UseRequestLocalization()根据客户端请求设置语言环境。UseAuthentication()启用身份验证。UseAuthorization()启用权限验证(要放在 UseRouting()UseEndpoints() 之间)。UseStaticFiles()启用静态文件支持。UseDeveloperExceptionPage()在开发环境下显示异常页面。UseHttpsRedirection()把 HTTP 请求重定向到 HTTPS。UseSession()启用会话功能。UseWebSockets()启用 WebSocket 支持。UseMiddleware<T>()使用自定义中间件。

2.2 路由相关

方法说明UseRouting()启用路由匹配机制。UseEndpoints()定义端点映射规则。MapGet/Post/Put/Delete()映射特定 HTTP 方法的请求。MapControllers()自动映射控制器中的路由。MapFallbackToController()当没有匹配时,回退到指定控制器。

2.3 文件与目录相关

方法说明UseDefaultFiles()启用默认首页文件(如 index.html)。UseDirectoryBrowser()启用目录浏览功能。UseFileServer()启用静态文件和默认文件功能。

2.4 性能与优化

方法说明UseResponseCaching()启用响应缓存。UseResponseCompression()启用响应压缩。UseRateLimiter()控制请求频率。UseConcurrencyLimiter()控制并发请求数量。

2.5 安全相关

方法说明UseHsts()启用 HSTS(HTTPS 安全策略)。UseCors()启用跨域资源共享。UseCookiePolicy()启用 Cookie 使用策略。


三、关键属性说明

WebApplication 提供多个重要属性。可用于访问运行时信息和做高级控制。

属性说明Configuration获取应用的配置(如 appsettings.json)。Environment获取当前运行环境(如 Development / Production)。Lifetime管理应用的生命周期事件。LoggerFactory获取日志工厂,用于记录日志。Services获取依赖注入容器。Urls获取或设置监听地址(如 http://localhost:5000)。

app.Urls.Clear();
//设置监听地址
app.Urls.Add("http://*:8080");

四、依赖注入与 Services 注册

通过 WebApplicationBuilder.Services 可注册服务。支持多种生命周期模式(Singleton、Scoped、Transient)。

var builder = WebApplication.CreateBuilder(args);

// 添加内存缓存
builder.Services.AddMemoryCache();

// 添加 Scoped 生命周期的服务
builder.Services.AddScoped<ITodoRepository, TodoRepository>();

// 添加 Singleton 生命周期的服务
builder.Services.AddSingleton<ILoggerService, ConsoleLoggerService>();

var app = builder.Build();

Tags:

最近发表
标签列表