ASP.NET Core 的 WebApplication 类和 WebApplicationBuilder 类

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>();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<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 based
builder.WebHost.UseHttpSys();
var app = builder.Build();
app.MapGet("/", () => "Hello HTTP.sys");
app.Run();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/62811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法训练营第四十天(9.1)| 动态规划Part11:最长子序列系列

Leecode 300.最长递增子序列 题目地址&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目类型&#xff1a;最长子序列 class Solution { public:int lengthOfLIS(vector<int>& nums) {int n nums.size();// dp[i]代表到第i个…

GPU版本pytorch(Cuda12.1)安装教程

我们通过Pytorch官网安装torch的时候&#xff0c;会发现常常由于网速问题安装不成功&#xff0c;下面提供一种简单的方法可以成功安装Cuda12.1&#xff0c;亲测有效。 目录 一、常规方法 二、有效方法 2.1 创建并激活虚拟环境 2.2 添加清华源 2.3 安装torch 一、常规方法…

rk3568 nvme硬盘分区,格式化,挂载测试

前言 环境介绍&#xff1a; 1.编译环境 Ubuntu 18.04.5 LTS 2.SDK rk356x_linux 3.单板 迅为itop-3568开发板 自制底板 一、查看硬盘 插上硬盘上电&#xff0c;进入系统后通过命令lspci查看nvme硬盘识别情况 [rootRK356X:/]# lspci -k 21:00.0 Class 0108: 1e4b:1202…

xsschallenge通关(11-15)

level 11 老规矩&#xff0c;先查看源码&#xff0c;做代码审计&#xff1a; <?php ini_set("display_errors", 0); $str $_GET["keyword"]; $str00 $_GET["t_sort"]; $str11$_SERVER[HTTP_REFERER]; $str22str_replace(">&quo…

Linux centos7 bash编程(小练习)

一、打印九九乘法口诀 这一个for循环嵌套的小练习&#xff0c;难度不大。提供一种写法&#xff0c;供参考&#xff1a; #!/bin/bash # 文件名&#xff1a;99table.sh # 打印输出九九乘法口诀表 for i in {1..9} do for ((j1;j<$i;j)) do …

雅思写作 三小时浓缩学习顾家北 笔记总结(三)

目录 顾家北饥饿网100个句子翻译 "Heritage sites threatened by urban development" "Heritage sites are threatened by urban development." We should not ignore face-to-face communication. We cannot ignore face-to-face communication. So…

使用Python对数据的操作转换

1、列表加值转字典 在Python中&#xff0c;将列表的值转换为字典的键可以使用以下代码&#xff1a; myList ["name", "age", "location"] myDict {k: None for k in myList} print(myDict) 输出&#xff1a; {name: None, age: None, loca…

给oracle逻辑导出clob大字段、大数据量表提提速

文章目录 前言一、大表数据附&#xff1a;查询大表 二、解题思路1.导出排除大表的数据2.rowid切片导出大表数据Linux代码如下&#xff08;示例&#xff09;&#xff1a;Windows代码如下&#xff08;示例&#xff09;&#xff1a;手工执行代码如下&#xff08;示例&#xff09;&…

C++11——右值引用和移动语义

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C11——右值引用 ☂️<3>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;右值引用&#xff0c;是C11更新的一个非常有价值的语法&am…

【网络安全防护】上海道宁与Bitdefender帮助您构建弹性网络并降低安全运营成本

在网络的世界中 风险变得更加常见与复杂 企业需要从网络安全转向网络弹性 复杂的网络攻击已非常普遍 在面临攻击时 企业如何保持业务连续性&#xff1f; Bitdefender GravityZone将 风险分析、安全加固、威胁预防 检测和响应功能相结合 帮助您构建弹性网络 并降低安全…

LinkedHashMap实现LRU缓存cache机制,Kotlin

LinkedHashMap实现LRU缓存cache机制&#xff0c;Kotlin LinkedHashMap的accessOrdertrue后&#xff0c;访问LinkedHashMap里面存储的元素&#xff0c;LinkedHashMap就会把该元素移动到最尾部。利用这一点&#xff0c;可以设置一个缓存的上限值&#xff0c;当存入的缓存数理超过…

手摸手2-springboot编写基础的增删改查

目录 手摸手2-springboot编写基础的增删改查创建controller层添加service层接口service层实现添加mapper层mapper层对应的sql添加扫描注解,对应sql文件的目录 手摸手2-springboot编写基础的增删改查 创建controller层 实现 test 表中的添加、修改、删除及列表查询接口&#x…

Unity——工程与资源

本文将详细介绍Unity工程的文件夹结构&#xff0c;以及动态加载资源的技术要点 一、Unity项目的文件夹结构 1.工程文件夹 在新建工程时&#xff0c;Unity会创建所有必要的文件夹。第一级文件夹有Assets,Library,Logs,Packages,ProjectSettings。 Assets&#xff1a;最主要的文…

Oracle Scheduler学习

参考文档&#xff1a; Primary Note: Overview of Oracle Scheduler (Doc ID 1485539.1) Oracle Database Administrators Guide 12c Release 1 (12.1) E17636-21 Chapter(30) Administering Oracle Scheduler Examples of Using the Scheduler http://docs.oracle.com/cd/E166…

stable diffusion实践操作-提示词插件安装与使用

本文专门开一节写提示词相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 正文 1、提示词插件安装 1.1、 安装 1.2 加载【应用更改并重载前端】 1.3 界面展示 1.3.-4 使用 里面有个收藏列表&#xff0c;可以收藏以前的所有提示…

安全攻防基础以及各种漏洞库

安全攻防基础以及各种漏洞库 信息搜集企业信息搜集1. 企业架构2. ICP备案查询&#xff0c;确定目标子域名3. 员工信息&#xff08;搜集账号信息、钓鱼攻击&#xff09;4. 社交渠道 域名信息搜集IP搜集信息泄露移动端搜集打点进内网命令和控制&#xff08;持续控制&#xff09;穿…

CSC2121A

半桥架构的栅极驱动电路CSC2121A CSC2121系列是一款高性价比的半桥架构的栅极驱动专用电路&#xff0c;用于大功率MOS管、IGBT管栅极驱动。IC内部集成了逻辑信号处理电路、死区时间控制电路、欠压保护电路、电平位移电路、脉冲滤波电路及输出驱动电路&#xff0c;专用于无刷电…

10 行代码能做什么?

10 行代码能做什么&#xff1f; 写一串 SQL Join&#xff0c;统计全渠道市场营销的 ROI 用 JS 画个饼图&#xff0c;展示最有效的广告投放策略 用 Python 写段算法&#xff0c;分析销量骤降的原因是什么 …… 数据出错了&#xff0c;写个对数脚本 -_-|| AI 时代&#xff0c;…

SpringMVC之文件上传和下载

文章目录 前言一、文件下载二、文件上传总结 前言 实现下载文件和上传文件的功能。 一、文件下载 使用ResponseEntity实现下载文件的功能 RequestMapping("/testDown") public ResponseEntity<byte[]> testResponseEntity(HttpSession session) throws IOEx…

Zookeeper的使用

一、Zookeeper简介 分布式协调框架&#xff0c;小型的树形结构数据共享储存系统。 zookeeper的应用场景 集群管理 注册中心 配置中心 发布者将数据发布到ZooKeeper一系列节点上面&#xff0c;订阅者进行数据订阅&#xff0c;当数据有变化时&#xff0c;可及时得到数据的变…