网站首页 > 知识剖析 正文
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();
猜你喜欢
- 2025-07-09 ASP.NET Core Web API 接口限流(asp.net core web api教程)
- 2025-07-09 C# ASP.NET Core Web Api 与 MVC 模式下 body 参数传递,post 参数方式
- 2025-07-09 ASP.NET Core Web API 中的 JSON 修补程序
- 2025-07-09 Visual Studio Code安装C#开发工具包并编写ASP.NET Core Web应用
- 2025-07-09 深入了解 ASP.NET Core 中的 IWebHostEnvironment 接口
- 2025-07-09 ASP.NET WebForms功能增强(三)(asp net web)
- 2025-07-09 跟着官网学ASP.NET Core 6.0之请求参数模型验证
- 2025-07-09 ASP.NET Web API中实现版本(asp.net2.0)
- 2025-07-09 提高 ASP.NET Web 应用性能的 24 种方法和技巧
- 2025-07-09 聊聊asp.net中Web Api的使用(asp.net api 开发)
- 07-09带你看好玩的CSS-霓虹灯按钮(css霓虹灯效果的文字)
- 07-0910个冷门但非常实用前端开发者很少用的CSS规则
- 07-09大厂都在用的10个css高级技巧,我敢说你最多用过3个!不服来辩!
- 07-092025年Top30 CSS面试题及答案(css笔试题)
- 07-09ASP.NET Core Web API 接口限流(asp.net core web api教程)
- 07-09C# ASP.NET Core Web Api 与 MVC 模式下 body 参数传递,post 参数方式
- 07-09ASP.NET Core Web API 中的 JSON 修补程序
- 07-09Visual Studio Code安装C#开发工具包并编写ASP.NET Core Web应用
- 最近发表
-
- 带你看好玩的CSS-霓虹灯按钮(css霓虹灯效果的文字)
- 10个冷门但非常实用前端开发者很少用的CSS规则
- 大厂都在用的10个css高级技巧,我敢说你最多用过3个!不服来辩!
- 2025年Top30 CSS面试题及答案(css笔试题)
- ASP.NET Core Web API 接口限流(asp.net core web api教程)
- C# ASP.NET Core Web Api 与 MVC 模式下 body 参数传递,post 参数方式
- ASP.NET Core Web API 中的 JSON 修补程序
- Visual Studio Code安装C#开发工具包并编写ASP.NET Core Web应用
- 深入了解 ASP.NET Core 中的 IWebHostEnvironment 接口
- ASP.NET WebForms功能增强(三)(asp net web)
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)