问题描述
嗨,我一直在API中使用标头版本控制方法,下面是链接。 我现在的问题是我似乎无法在SwaggerConfig.cs中的Swagger上使用它。
我将向您展示“多个版本控制”中的代码,但是它不起作用。这是多版本控制的一部分
public class SwaggerConfig
{
public static void Register()
{
var thisAssembly = typeof(SwaggerConfig).Assembly;
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{ c.MultipleApiVersions(
(apiDesc,targetApiVersion) => targetApiVersion.Equals("V1",StringComparison.InvariantCultureIgnoreCase) || // Include everything by default
apiDesc.Route.RouteTemplate.StartsWith(targetApiVersion,StringComparison.InvariantCultureIgnoreCase),// Only include matching routes for other versions
(vc) =>
{
vc.Version("V1","Real Time API V1");
vc.Version("V2","Real Time API V2");
}); }) .EnableSwaggerUi(c =>
{ c.EnablediscoveryUrlSelector();});
https://seroter.com/2012/09/25/versioning-asp-net-web-api-services-using-http-headers/
标头APi正在与具有SAME api路由的其他控制器一起使用。 所以我的版本控制完全基于控制器名称。.有人可以帮我吗..谢谢
解决方法
ASP.NET API Versioning可以非常简单直接地实现。您可以通过所需的任何方法轻松地进行版本控制,包括标头。要与Swashbuckle之类的OpenAPI / Swagger生成器集成,您只需添加支持API版本的API Explorer扩展。您可以查看端对端Web API example here。
免责声明:我是所有者和作者
您显示的方法似乎是我不熟悉的某种替代版本控制。我可以凭经验说 Try It!功能在按标头进行版本控制并且是跨域的时可能会很棘手。这与CORS的工作方式有关。浏览器将在预检中不发送自定义标头,其中包括API版本标头。为了解决这个问题,我相信 Swagger UI / JavaScript中有一个钩子,您可以在提出CORS请求之前手动注入标头。