c# - AddMvc/AddSwaggerGen 和 UseMvc/UseSwagger(UI) 之间的顺序

标签 c# asp.net-core swagger asp.net-core-2.2 swagger-3.0

当我使用 Swagger 为我的 API 提供动力时,我遵循了 those guids 之一而且我总是像这样将 MVC 注入(inject)放在 Swagger 注入(inject)之前。

services.AddMvc();
services.AddSwaggerGen(_ => { ... });

app.UseMvc();
app.UseSwagger();
app.UseSwaggerUI(c => { ... });

我的一个 friend 问我为什么应用那个顺序而不是在 MVC 之前先处理 Swagger 相关行。我发现我无法向他解释,也无法激励他(除了非常尴尬的好吧......事情就是这样......)。这告诉我,我应该深入研究一下这个问题。

据我所知,简短的谷歌搜索没有发现任何相关内容,所以我在这里提问。

最佳答案

在这种特殊情况下,Add*不受它们添加到服务集合的顺序的影响。

但是,取决于特定的执行Add*扩展名,顺序可能会影响配置。例如,如果它在内部使用 TryAdd*分机,则只有第一个调用登记。后续调用不会添加,因为注册已经存在。

将军AddScoped/AddSingleton/AddTransient calls 识别类型的最后一次调用,因为它会覆盖该类型的先前注册调用。为一个类型注册多个实现时,通过 IEnumerable<T> 解析那么集合中的实现将按照它们注册的顺序排列。

引用 Dependency injection in ASP.NET Core

对于 Use*中间件它们添加到管道的顺序很重要,因为它们以相同的顺序被调用。

Order

The order that middleware components are added in the Startup.Configure method defines the order in which the middleware components are invoked on requests and the reverse order for the response. The order is critical for security, performance, and functionality.

引用 ASP.NET Core Middleware

根据我的经验,根据他们的设计目的,一些需要访问管道的第 3 方集成(包括 swagger)建议在 AddMvc 之后添加他们的扩展。尽量避免路由冲突。

大多数安全(身份验证/授权)和日志记录中间件通常建议在管道的早期添加,因此它们往往出现在 AddMvc 之前。 .

关于c# - AddMvc/AddSwaggerGen 和 UseMvc/UseSwagger(UI) 之间的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53925413/

相关文章:

.net - 如何使用 Swashbuckle 在生成的 Swagger 文件中生成全局参数?

c# - 在 Azure 中的 ASP.NET Core 3.1 应用程序中获取 swagger-ui 返回 404

javascript - 如何从angular js中的swagger编辑器获取修改后的数据

c# - 通用类型的 ASP.NET MVC 模型绑定(bind)器

jquery - Net Core Ajax Jquery 将空值传递给 Controller ​​,Vs2022,.Net 6

asp.net - 在 .Net 标准目标中引用 AspNetCore 库

c# - .ASP.NET Core 仅在 Controller 上存在策略时运行策略处理程序

c# - 属性与方法

c# - XML 文档不能包含多个根级元素

c# - 如何限制 .NET DynamoDB 中 context.Query 的结果数量