网上看到不少整理的,但是当我搭建的时候发现很多包在nuget中找不到了,所以特地在此写记录一下
我的项目的版本是4.5的,用的nuget包是Swagger-Net和Swashbuckle.Net45
添加完成后右键项目属性->生成->输出 勾选XML文档文件
如图显示就正常的文档了,前提是你的代码中有注释
下边讲一下怎么在这个页面中请求接口
显示无参数的请求接口
这是有参数的使用
正常使用没问题,但是,有的接口会在header中添加一些内容进行请求头的验证,这里讲一下请求头有验证的情况下怎么设置
有过滤器ApiAuthAttribute 这里简单检查一下header中是否存在一个auth
protected override bool IsAuthorized(HttpActionContext actionContext) { var authHeader = from t in actionContext.Request.Headers where t.Key == "auth" select t.Value.FirstOrDefault(); if (authHeader != null) { string token = authHeader.FirstOrDefault(); if (string.IsNullOrEmpty(token)) { HttpResponseMessage result = new HttpResponseMessage(); result.StatusCode = (HttpStatusCode)401; actionContext.Response = result; return false; } else { return true; } } else { return false; } }
GlobalHttpHeaderFilter
public class GlobalHttpHeaderFilter : IOperationFilter { public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) { if (operation.parameters == null) 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<ApiAuthAttribute>().Any();//是否有验证用户标记 if (isNeedLogin)//如果有验证标记 多输出1个文本框(swagger form提交是会将这两个值放到header中) { operation.parameters.Add(new Parameter {name="auth",@in="header",description="令牌(登陆后可以获取)",required=false,type="string" }); } } }
在App_Start文件夹中找到SwaggerConfig
查找"c.OperationFilter"在这个被注释的代码下边添加一行
//GlobalHttpHeaderFilter是上边创建的文件名 c.OperationFilter<GlobalHttpHeaderFilter>();
然后再启动访问文档页,如图所示就可以了