csharp
namespace OnlineAPI.Utility
{
///<summary>
///
///</summary>
public class AccessKeyAttribute: AuthorizeAttribute
{
///<summary>
///权限确认
///</summary>
///<param name="actionContext"></param>
///<returns></returns>
protected override bool IsConfirmed(HttpActionContext actionContext)
{
var request= actionContext.Request;
if(request.Headers.Contains("access-key"))
{
var accessKey= request.Headers.GetValues("access-key").SingleOrDefault();
//TODO验证Key
return accessKey=="123456789";
}
return false;
}
///<summary>
///处理未确认的请求
///</summary>
///<param name="actionContext"></param>
protected override void HandleUnconfirmedRequest(HttpActionContext actionContext)
{
var content= JsonConvert.SerializeObject(new{State= HttpStatusCode.Unauthorized});
actionContext.Response= new HttpResponseMessage
{
Content= new StringContent(content, Encoding.UTF8,"application/json"),
StatusCode= HttpStatusCode.Unauthorized
};
}
}
}
在你的ApiController或者是 Action加入过滤器
[AccessKey]
最终呈现效果
4.展示上传文件参数
SwaggerUI提供上传文件的功能,与添加自定义HTTP Header的方法类似,只是我们通过特定的设置来标识API支持文件上传
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Description;
using Swashbuckle.Swagger;
namespace OnlineAPI.Utility
{
///<summary>
///
///</summary>
public class UploadFilter: IOperationFilter
{
///<summary>
///文件上传处理
///</summary>
///<param name="operation"></param>
///<param name="schemaRegistry"></param>
///<param name="apiDescription"></param>
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if(!string.IsNullOrWhiteSpace(operation.summary)&& operation.summary.Contains("upload"))
{
operation.consumes.Add("application/form-data");
operation.parameters.Add(new Parameter
{
name="file",
in="formData",
required= true,
type="file"
});
}
}
}
}
在 SwaggerConfig.cs的 EnableSwagger配置匿名方法类中添加一行注册代码
c.OperationFilter<UploadFilter>();
API文档展示效果