如何配置 swashbuckle
以使用 Aspnet API
verisoning? https://github.com/Microsoft/aspnet-api-versioning
在我的 Startup.cs
中,我有以下代码来初始化基于属性的路由,api版本控制和swagger .
var constraintResolver = new DefaultInlineConstraintResolver()
{
ConstraintMap =
{
["apiVersion"] = typeof( ApiVersionRouteConstraint )
}
};
config.MapHttpAttributeRoutes(constraintResolver);
config.AddApiVersioning();
config.EnableSwagger(c =>
{
c.MultipleApiVersions(
(apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion),
(vc) =>
{
vc.Version("v1", "Swashbuckle Dummy API V1");
vc.Version("v2", "Swashbuckle Dummy API V2");
});
}
public static bool ResolveVersionSupportByRouteConstraint(ApiDescription apiDesc, string targetApiVersion)
{
var versionConstraint = (apiDesc.Route.Constraints.ContainsKey("apiVersion"))
? apiDesc.Route.Constraints["apiVersion"] as RegexRouteConstraint
: null;
return (versionConstraint == null)
? false
: versionConstraint.Pattern.Split('|').Contains(targetApiVersion);
}
当ResolveVersionSupportByRouteConstraint方法触发路由模板时,包括文字api字符串“api / v / users”我的用户控制器用[ApiVersion(“1.0”)]进行修饰,我定义了以下路由[Route(“api / v”) {版本:apiVersion} /用户“)] . 当我用邮递员点击api / v1 / users时调用有效,但我无法弄清楚如何使用Swashbuckle / Swagger .
我希望我的swagger文档看起来像asp.net核心api样板文件的示例,除了我使用Owin与owin启动类而不是.net core:https://github.com/ASP-NET-Core-Boilerplate/Templates/blob/master/MVC%206%20API.md
2 回答
你可以找到例子here这就是我在自托管owin应用程序启动时的方法:
swagger的配置非常简单,主要部分是VersionedApiExplorer(确保你传递了api的正确groupname格式,我的格式是v1,v2等):
在控制器中添加属性ApiVersion和RoutePrefix
如果您对VersionFilter和VersionOperationFilter感到困惑,那么就有代码 . 这个过滤器在swagger中修改结果路由和参数(没有你的路由看起来像/ v / 并包含所需的参数版本)
我认为ResolveVersionSupportByRouteConstraint方法可能有误,请参阅:https://github.com/domaindrivendev/Swashbuckle/issues/197#issuecomment-75288894