swagger 的配置
1,开启swagger :
c.IncludeXmlComments(GetXmlCommentsPath());
protected static string GetXmlCommentsPath()
{
return string.Format(@"{0}\bin\{1}.xml", System.AppDomain.CurrentDomain.BaseDirectory
, Assembly.GetExecutingAssembly().GetName().Name);
}
2,在外网访问时swagger提示错误:
当我尝试看到swagger UI时,我很好地获得了API的文档但是在一段时间后它在按钮上显示了一些错误图标 .
错误消息如下所示:
[{“level”:“error”,“message”:“无法从文件中读取http:// MYIP / swagger / docs / v1”}]
我不确定是什么导致它 . 如果我刷新它工作并在几秒后显示错误 .
可以对如下代码进行设置:
//c.SetValidatorUrl("http://localhost/validator");
c.DisableValidator();
3,在web项目下
a,找到Scripts目录
b,创建Swagger目录
c,创建 swagger_lang.js 文件,把 "swagger_lang.js" 文件的生成操作,改为 “嵌入的资源”
d,c.InjectJavaScript(thisAssembly, $"{thisAssembly.GetName().Name}.Scripts.Swagger.swagger_lang.js");
4,swagger 没有显示方法名
要在swagger文档中显示接口的方法名,只需修改路由模版就可以了。修改后的代码如下:
config.Routes.MapHttpRoute(
name: "DefaultApi",
//routeTemplate: "api/{controller}/{id}",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
5,swagger 添加 token
在 SwaggerConfig.cs 文件中,添加
c.OperationFilter<AuthTokenHeaderParameter>();
using System; using System.Collections.Generic; using System.Linq; using System.Web.Http.Description; using Swashbuckle.Swagger; namespace Coordinator.MvcWebAPI { public class AuthTokenHeaderParameter : IOperationFilter { public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) { operation.parameters = operation.parameters ?? new List<Parameter>(); ////var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline(); //判断是否添加权限过滤器 ////var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Instance).Any(filter => filter is IAuthorizationFilter); //判断是否允许匿名方法 var isNeedLogin = apiDescription.ActionDescriptor.GetCustomAttributes<AuthenticationAttribute>().Any(); if (isNeedLogin) { operation.parameters.Add( new Parameter { name = "Authorization", @in = "header", description = "Bearer Token", required = true, type = "string" } ); } } } }
6,Controller 加备注信息,过滤掉部分 Controller
c.DocumentFilter<ApplyDocumentVendorExtensions>();
public class ApplyDocumentVendorExtensions : IDocumentFilter { public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer) { // Controller 加备注信息 swaggerDoc.tags = new List<Tag> { new Tag{ name="Auth", description="安全认证中心"}, new Tag{ name="Upload", description="文件传输接口" } }; //过滤掉部分 Controller //var paths = new Dictionary<string, PathItem>(swaggerDoc.paths); //swaggerDoc.paths.Clear(); //foreach (var path in paths) //{ // if (path.Key.Contains("Values")) // swaggerDoc.paths.Add(path); //} } }