【发布时间】:2017-11-06 15:51:52
【问题描述】:
如何配置 swashbuckle 以使用 Aspnet API 验证?
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{version}/users” 我的用户控制器装饰有 [ApiVersion("1.0")] 并且我定义了以下路由 [Route(" api/v{版本:apiVersion}/users")]。当我用邮递员点击 api/v1/users 时,呼叫有效,但我不知道如何使用 Swashbuckle/Swagger 进行此操作。
我希望我的 swagger 文档看起来像 asp.net 核心 api 样板的示例,除了我使用 Owin 和 owin 启动类而不是 .net 核心:https://github.com/ASP-NET-Core-Boilerplate/Templates/blob/master/MVC%206%20API.md
【问题讨论】:
标签: c# asp.net-web-api swagger swashbuckle