.net webapi 使用swagger生成文档


网上看到不少整理的,但是当我搭建的时候发现很多包在nuget中找不到了,所以特地在此写记录一下

我的项目的版本是4.5的,用的nuget包是Swagger-Net和Swashbuckle.Net45

添加完成后右键项目属性->生成->输出  勾选XML文档文件

启动项目后访问如下地址:

你的项目地址/swagger/ui/index

 

如图显示就正常的文档了,前提是你的代码中有注释

下边讲一下怎么在这个页面中请求接口

显示无参数的请求接口

这是有参数的使用

 

正常使用没问题,但是,有的接口会在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>();

然后再启动访问文档页,如图所示就可以了

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM