AddMvc/AddSwaggerGen 和 UseMvc/UseSwagger(UI) 之间的顺序
The order between AddMvc/AddSwaggerGen and UseMvc/UseSwagger(UI)
当我使用 Swagger 为我的 API 提供支持时,我遵循其中一个 those guids 并且我总是像这样将 MVC 注入放在 Swagger 注入之前。
services.AddMvc();
services.AddSwaggerGen(_ => { ... });
app.UseMvc();
app.UseSwagger();
app.UseSwaggerUI(c => { ... });
我的一个朋友问我为什么应用那个顺序而不是在 MVC 之前先处理 Swagger 相关行。我发现我无法向他解释,也无法激励他(除了非常尴尬 好吧...就是这样...)。这告诉我,我应该深入研究一下这个问题。
据我所知,简短的谷歌搜索显示没有任何相关性,所以我在这里问。
在这种特殊情况下,Add*
不受它们添加到服务集合的顺序的影响。
但是,根据特定 Add*
扩展的实施,顺序可能会影响配置。例如,如果它在内部使用 TryAdd*
扩展名,则只有第一个调用会注册。后续调用不会添加,因为注册已经存在。
常规 AddScoped/AddSingleton/AddTransient
调用识别类型的最后一次调用,因为它会覆盖该类型的先前注册调用。当为一个类型注册多个实现时,为了通过 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.
根据我的经验,根据他们的设计目的,一些需要访问管道的第 3 方集成(包括 swagger)建议在 AddMvc
之后添加他们的扩展以尝试避免路由冲突。
大多数安全 (Authentication/Authorization) 和日志记录中间件通常建议在管道的早期添加,因此它们往往在 AddMvc
.
之前添加
当我使用 Swagger 为我的 API 提供支持时,我遵循其中一个 those guids 并且我总是像这样将 MVC 注入放在 Swagger 注入之前。
services.AddMvc();
services.AddSwaggerGen(_ => { ... });
app.UseMvc();
app.UseSwagger();
app.UseSwaggerUI(c => { ... });
我的一个朋友问我为什么应用那个顺序而不是在 MVC 之前先处理 Swagger 相关行。我发现我无法向他解释,也无法激励他(除了非常尴尬 好吧...就是这样...)。这告诉我,我应该深入研究一下这个问题。
据我所知,简短的谷歌搜索显示没有任何相关性,所以我在这里问。
在这种特殊情况下,Add*
不受它们添加到服务集合的顺序的影响。
但是,根据特定 Add*
扩展的实施,顺序可能会影响配置。例如,如果它在内部使用 TryAdd*
扩展名,则只有第一个调用会注册。后续调用不会添加,因为注册已经存在。
常规 AddScoped/AddSingleton/AddTransient
调用识别类型的最后一次调用,因为它会覆盖该类型的先前注册调用。当为一个类型注册多个实现时,为了通过 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.
根据我的经验,根据他们的设计目的,一些需要访问管道的第 3 方集成(包括 swagger)建议在 AddMvc
之后添加他们的扩展以尝试避免路由冲突。
大多数安全 (Authentication/Authorization) 和日志记录中间件通常建议在管道的早期添加,因此它们往往在 AddMvc
.