1、使用VS2015创建解决方案NJLHR.Solution、项目WebApp。使用ASP.NET 4.6模板下的Web API,身份验证选择”个人用户帐户“。
2、NuGet下安装 Microsoft.Owin.Cors ,用于支持跨域访问。Startup.Auth.cs文件内的方法添加语句:
//支持跨域访问
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
3、NuGet下安装 Swashbuckle ,用于 API 操作、描述,便于管理测试API。
文件 SwaggerConfig.cs 取消 c.IncludeXmlComments(GetXmlCommentsPath()); 的注释,并添加方法 GetXmlCommentsPath():
/// <summary>
/// 获取文档说明XML的文件路径
/// <para>项目WebApp的属性=>生成=>勾选“XML文档文件”</para>
/// </summary>
/// <returns></returns>
private static string GetXmlCommentsPath()
{
return System.String.Format(@"{0}\bin\WebApp.XML", System.AppDomain.CurrentDomain.BaseDirectory);
}
文件 SwaggerConfig.cs 取消 c.IncludeXmlComments(GetXmlCommentsPath()); 的注释,并添加 AssignOAuth2SecurityRequirements 类:
/// <summary>
/// swagger api 增加 request headers 的参数Authorization,用于提交token值
/// </summary>
public class AssignOAuth2SecurityRequirements : 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 allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
if (isAuthorized && !allowAnonymous)
{
operation.parameters.Add(new Parameter { name = "Authorization", @in = "header", description = "Token", required = false, type = "string" });
}
}
}