ASP.NET Core 中的应用启动

ASP.NET Core 中的应用启动 | Microsoft Learnicon-default.png?t=N7T8https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/startup?view=aspnetcore-8.0

目录

使用 Startup 筛选器扩展 Startup

在启动时从外部程序集添加配置

Startup、ConfigureServices 和 Configure


作者:Rick Anderson

使用 Web 模板创建的 ASP.NET Core 应用包含 Program.cs 文件中的应用程序启动代码。

以下应用启动代码支持:

  • Razor Pages
  • 具有视图的 MVC 控制器
  • 具有控制器的 Web API
  • 最小 API

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

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

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

使用 EventSource 的应用可以度量启动时间,以了解和优化启动性能。 Microsoft.AspNetCore.Hosting 中的 ServerReady 事件表示服务器已准备好响应请求的点。

有关应用程序启动的详细信息,请参阅 ASP.NET Core 基础知识概述。

使用 Startup 筛选器扩展 Startup

使用 IStartupFilter:

  • 在应用的中间件管道的开头或末尾配置中间件,而无需显式调用 Use{Middleware}。 使用 IStartupFilter 在不显式注册默认中间件的情况下将默认值添加到管道的开头。 IStartupFilter 允许代表应用作者使用不同的组件调用 Use{Middleware}
  • 创建 Configure 方法的管道。 IStartupFilter.Configure 可以将中间件设置为在库添加的中间件之前或之后运行。

IStartupFilter 实现 Configure,即接收并返回 Action<IApplicationBuilder>。 IApplicationBuilder 定义用于配置应用请求管道的类。 有关详细信息,请参阅使用 IApplicationBuilder 创建中间件管道。

每个 IStartupFilter 可以在请求管道中添加一个或多个中间件。 筛选器按照添加到服务容器的顺序调用。 筛选器可在将控件传递给下一个筛选器之前或之后添加中间件,从而附加到应用管道的开头或末尾。

下面的示例演示如何使用 IStartupFilter 注册中间件。 RequestSetOptionsMiddleware 中间件从查询字符串参数中设置选项值:

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

在 RequestSetOptionsStartupFilter 类中配置 RequestSetOptionsMiddleware

namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}
// </snippet1>

IStartupFilter 在 Program.cs 中注册:

using WebStartup.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

当提供 option 的查询字符串参数时,中间件在 ASP.NET Core 中间件呈现响应之前处理分配值:

  CSHTML

@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];

中间件执行顺序由 IStartupFilter 注册顺序设置:

  • 多个 IStartupFilter 实现可能与相同的对象进行交互。 如果顺序很重要,请将它们的 IStartupFilter 服务注册进行排序,以匹配其中间件应有的运行顺序。

  • 库可能添加包含一个或多个 IStartupFilter 实现的中间件,这些实现在向 IStartupFilter 注册的其他应用中间件之前或之后运行。 若要在库的 IStartupFilter 添加的中间件之前调用 IStartupFilter 中间件,请执行以下操作:

    • 在库添加到服务容器之前定位服务注册。
    • 要在此后调用,请在添加库之后定位服务注册。

注意:重写 Configure 时,无法扩展 ASP.NET Core 应用。 有关详细信息,请参阅此 GitHub 问题。

在启动时从外部程序集添加配置

通过 IHostingStartup 实现,可在启动时从应用的 Program.cs 文件之外的外部程序集向应用添加增强功能。 有关详细信息,请参阅在 ASP.NET Core 中使用托管启动程序集。

Startup、ConfigureServices 和 Configure

有关将 ConfigureServices 和 Configure 方法与最小托管模型结合使用的信息,请参阅:

  • 将 Startup 与最小托管模型结合使用
  • 本文的 ASP.NET Core 5.0 版本:
    • ConfigureServices 方法
    • Configure 方法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日一题——LeetCode141.环形链表

个人主页&#xff1a;白日依山璟 专栏&#xff1a;Java|数据结构与算法|每日一题 文章目录 1. 题目描述示例1&#xff1a;示例2&#xff1a;示例3&#xff1a;提示: 2. 思路3. 代码 1. 题目描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某…

041、基于CNN的样式迁移

之——基于CNN的滤镜 目录 之——基于CNN的滤镜 杂谈 正文 1.基于CNN的样式迁移 2.实现 杂谈 通过CNN的特征提取&#xff0c;可以实现将一个图片的样式模式特征迁移到另一张图像上。 正文 1.基于CNN的样式迁移 就是在某些层的输出上用其他的图片进行监督。 2.实现 一般来…

国际会议口译,选择同传好还是交传好

在国际会议中&#xff0c;同传与交传是常见的两种翻译方式&#xff0c;它们各自承载着独特的使命与优势&#xff0c;为沟通世界发挥着不可替代的作用。那么&#xff0c;同传好还是交传好&#xff0c;如何选择合适的翻译方式&#xff1f; 首先&#xff0c;从费用角度来看&#x…

苹果怎么调字体大小?详细教程在这,赶快get起来!

在我们使用苹果手机时&#xff0c;可能会遇到需要调整字体大小的情况。合适的字体大小能够提高阅读体验和舒适度&#xff0c;使得手机使用更加便捷。然而&#xff0c;还有很多用户并不知道苹果怎么调字体大小。别着急&#xff01;本文将为您详细介绍操作方法&#xff0c;帮助您…

云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目录 前言&#xff1a;一、云计算1.1 云计算的基本思想1.2 云计算概述——什么是云计算&#xff1f;1.3 云计算的基本特征1.4 云计算的部署模式1.5 云服务1.6 云计算的关键技术——虚拟化技术1.6.1 虚拟化的好处1.6.2 虚拟化技术的应用——12306使用阿里云避免了高峰期的崩…

selenium模块有哪些用途?

Selenium模块是一个用于Web应用程序测试的模块&#xff0c;具有多种示例用法。以下是一些示例&#xff1a; 1.打开网页并执行一些基本操作&#xff0c;如点击按钮、输入文本等。 定位网页元素并执行操作&#xff0c;例如使用 find_element 方法查找单个元素&#xff0c;使用 f…

zabbix-邮件告警与钉钉机器人告警

zabbix-邮件告警 在部署邮件告警前需要先将zabbix部署成功 邮件告警需要得到邮箱的授权码&#xff0c;这里将以qq邮箱为例。 1.获取邮箱的授权码 2.编辑Email的相关信息 3.测试Email是否配置成功 测试成功。 4.为用户添加邮箱报警服务 5.创建主机群组、主机、监视项、触…

苹果ipad怎么录屏?让小白也能轻松上手

随着科技的发展&#xff0c;越来越多的用户使用苹果ipad进行工作、学习和娱乐。在使用过程中&#xff0c;难免会遇到需要录屏的情况&#xff0c;如录制游戏过程、教程讲解等。在本篇文章中&#xff0c;我们将详细介绍苹果ipad怎么录屏&#xff0c;帮助您轻松记录ipad屏幕上的精…

Unity程序向Web服务器发送数据

Unity程序向Web服务器发送数据 一、介绍二、HTTP协议三、新建Unity工程&#xff0c;创建脚本1.新建Unity工程&#xff0c;创建脚本WebManager.cs&#xff0c;将其指定给场景中的任意游戏体。2.在WebManager.cs中添加一个m_info属性和OnGUI函数显示UI&#xff1a; 四、GET请求在…

免费福利马上截止!深圳的户外小伙伴别错过!COSP2024体育展来了

COSP2024户外博览会 展会时间&#xff1a;2024年3月14-16日 展会地址&#xff1a;深圳福田会展中心 户外运动爱好者不可错过&#xff01; COSP2024户外博览会不仅可以逛展 看各种露营装备、户外器材 还有各种沙龙、峰会活动 就在明年开年&#xff0c;阳春三月天&#xf…

服务器扩容未生效、不成功:解决方法

记一次解决服务器扩容未生效的解决办法 老板&#xff1a;失忆啊&#xff0c;我花钱给服务器扩容了10000000G&#xff0c;但是数据库和mq都还是用不了&#xff0c;到底是不是服务器磁盘满了&#xff0c;你到底有没有查一下什么原因导致服务用不了啊。 失忆&#xff1a;老板您确…

哪个牌子的台灯对学生的视力好?五款学生备考台灯推荐

护眼台灯在如今市场中销量越来越高&#xff0c;我作为一名电器测评博主&#xff0c;非常支持大家使用护眼台灯来提升日常的照明光线环境&#xff0c;它通过LED灯和专业的护眼技术&#xff0c;可以有效缓解用眼疲劳、帮助放松和舒适照明。但需要注意的是&#xff0c;目前市场中品…

Yarn ResourceManager 页面上的绿色条块(Used Resources)反映的是真实的资源占用情况吗?

过去&#xff0c;一直习惯于在 Yarn 的 ResourceManager 页面上&#xff0c;通过菜单&#xff1a;Cluster -> Scheduler 查看当前 Yarn 总体的资源分配状况&#xff0c;因为这个页面非常直观。不过&#xff0c;在最近一次测试中&#xff0c;我发现&#xff1a;Yarn Resource…

(Matlab)基于CNN-LSTM的多输入分类(卷积神经网络-长短期记忆网络)

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、代码实际运行结果展示&#xff1a; 三、部分代码展示&#xff1a; 四、本文完整代码数据下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码…

Matlab仿真2ASK/OOK、2FSK、2PSK、QPSK、4QAM在加性高斯白噪声信道中的误码率与归一化信噪比的关系

本文为学习所用&#xff0c;严禁转载。 本文参考链接 https://zhuanlan.zhihu.com/p/667382398 QPSK代码及高斯白噪声如何产生 https://ww2.mathworks.cn/help/signal/ref/butter.html 滤波器 https://www.python100.com/html/4LEF79KQK398.html 低通滤波器 本实验使用matlab仿…

毫米波RIS研究测试方案:一站式助力工程师探索高频通信未来

方案介绍 在当前科技高速发展的时代&#xff0c;毫米波通信技术因其高数据传输速率和大容量的潜力而备受瞩目。其中&#xff0c;可重构智能表面&#xff08;RIS&#xff09;作为一项创新技术&#xff0c;正在为毫米波通信系统的设计和优化带来新的可能性。为了应对这一领域的研…

Linux系统安装及管理

目录 一、Linux应用程序基础 1.1应用程序与系统命令的关系 1.2典型应用程序的目录结构 1.3常见的软件包装类型 二、RPM软件包管理 1.RPM是什么&#xff1f; 2.RPM命令的格式 2,1查看已安装的软件包格式 2.2查看未安装的软件包 3.RPM安装包从哪里来&#xff1f; 4.挂…

WebGL技术实现机械工程培训

机械工程培训的虚拟环境可以通过 WebGL 技术实现&#xff0c;提供沉浸式的三维体验&#xff0c;帮助学生学习机械结构、运动原理和装配过程。以下是开发机械工程培训虚拟环境的一般步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发…

后台管理百度地图-获取位置信息

1.在输入框中输入位置获取经纬度&#xff0c;拿到经纬度用定点标记在地图上 2.鼠标点击地图中的位置&#xff0c;调用组件点击事件拿到经纬度用定点标记在地图上&#xff0c;删除之前的定点标记&#xff0c;拿到的地址赋值到输入框中&#xff0c; 引入百度地图&#xff1a; &l…

旧衣回收小程序搭建有什么优势?

今年以来&#xff0c;旧衣回收行业分外火热&#xff0c;不断有创业者进入到市场中&#xff0c;其中不乏有年轻人&#xff0c;足以可见行业的火爆。 我国是人口大国&#xff0c;每个人闲置的衣物加在一起的数量难以计算&#xff0c;旧衣回收行业具有巨大的发展空间。 此外&…
最新文章