1、SwaggerConfig文件配置

 public class SwaggerConfig
{
protected static string GetXmlCommentsPath()
{
return System.String.Format(@"{0}\bin\xxx.OMS.WebApi.Partner.XML", System.AppDomain.CurrentDomain.BaseDirectory);
} protected static string GetCommonXmlCommentsPath()
{
return System.String.Format(@"{0}\bin\xxx.OMS.Common.XML", System.AppDomain.CurrentDomain.BaseDirectory);
} protected static string GetDtoXmlCommentsPath()
{
return System.String.Format(@"{0}\bin\xxx.OMS.Data.XML", System.AppDomain.CurrentDomain.BaseDirectory);
} protected static string GetXFCCommentsPath()
{
return System.String.Format(@"{0}\bin\xxx.XML", System.AppDomain.CurrentDomain.BaseDirectory);
} private static bool ResolveVersionSupportByRouteConstraint(ApiDescription apiDesc, string targetApiVersion)
{
//过滤由多版本的controller带来的重复route注册api desc,按命名空间的版本信息过滤,只返回版本内的api
return apiDesc.ActionDescriptor.ControllerDescriptor.ControllerType.FullName.ToLower().Contains(string.Format(".{0}.", targetApiVersion));
} public static void Register()
{
var thisAssembly = typeof(SwaggerConfig).Assembly; GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "xxx.OMS.WebApi.Partner");
c.SchemaId(x => x.FullName); //避免类型命名冲突
c.IncludeXmlComments(GetCommonXmlCommentsPath());
c.IncludeXmlComments(GetXmlCommentsPath());
c.IncludeXmlComments(GetDtoXmlCommentsPath());
c.IncludeXmlComments(GetXFCCommentsPath());
c.OperationFilter<HttpHeaderFilter>();
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
})
.EnableSwaggerUi(c =>
{
c.DisableValidator();
});
}
}

2、HttpHeaderFilter 请求头参数设置

public class HttpHeaderFilter : 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 = "appId",
@in = "header",
description = "应用Id",
required = true,
type = "string"
}); operation.parameters.Add(new Parameter
{
name = "accessToken",
@in = "header",
description = "接口访问token",
required = true,
type = "string"
});
}
}
}

3、AccessTokenAttribute身份认证

 public class AccessTokenAttribute : AuthorizeAttribute
{
/// <summary>
/// 获取认证服务
/// </summary>
/// <returns></returns>
private IOpenAuthService GetAuthService()
{
return xxx.OMS.Service.Common.ServiceMediatorManager.OpenAuthService;
} /// <summary>
/// 权限验证
/// </summary>
/// <param name="actionContext"></param>
/// <returns></returns>
protected override bool IsAuthorized(HttpActionContext actionContext)
{
var request = actionContext.Request;
if (request.Headers.Contains("appId")
&& request.Headers.Contains("accessToken"))
{
var appId = request.Headers.GetValues("appId").SingleOrDefault();
var accessToken = request.Headers.GetValues("accessToken").SingleOrDefault(); var authRequest = new AuthRequest()
{
AppId = appId,
AccessToken = accessToken
}; var checkResult = GetAuthService().Check(authRequest);
if (!checkResult.isOk || !checkResult.retBody)
{
return false;
} var accountResult = GetAuthService().GetAccount(authRequest);
if (!accountResult.isOk || accountResult.retBody == null)
{
return false;
} var account = accountResult.retBody;
var customer = new CustomerInfo
{
AppId = account.AppId,
SupplierId = account.SupplierId,
SupplierName = account.SupplierName
}; HttpContext.Current.User = new CustomerPrincipal(new CustomerIdentity(customer));
return true;
}
return false;
} /// <summary>
/// 处理未授权的请求
/// </summary>
/// <param name="actionContext"></param>
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
var content = JsonConvert.SerializeObject(new ResultObject() { retStatus = , retMsg = "appId或者accessToken无效" });
actionContext.Response = new HttpResponseMessage
{
Content = new StringContent(content, Encoding.UTF8, "application/json"),
StatusCode = HttpStatusCode.OK
};
}
}

4、JsonDateTimeConverter Json日期转换

/// <summary>
/// Json日期带T格式转换
/// </summary>
public class JsonDateTimeConverter : IsoDateTimeConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
DateTime dataTime;
if (DateTime.TryParse(reader.Value.ToString(), out dataTime))
{
return dataTime;
}
else
{
return existingValue;
}
} /// <summary>
/// 格式化
/// </summary>
public JsonDateTimeConverter()
{
DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
}
}

Swagger相关配置记录的更多相关文章

  1. Vue-cli 多页相关配置记录

    Vue-cli 多页相关配置记录 搭建一个顺手的MPA项目脚手架,其实根据项目的不同目录结构和打包配置都可以进行灵活的调整.这次的项目可能是包含各种客户端和管理后台在一起的综合项目所以需要将样式和脚本 ...

  2. nginx的相关配置记录和总结

    前言 本文旨在对nginx的各项配置文件和参数做一个记录和总结. 原因是在配置框架和虚拟目录,web语言解析的nginx环境的时候遇到各种问题和参数,有时百度可以解决,有时直接复制粘贴,大都当时有些记 ...

  3. 个人网站搭建时linux中的相关配置记录(mysql,jdk,nginx,redis)

    一.开发计划(包括准备工作,网站大致需求等) 二.服务器(linux/centos)购买.相应环境配置(jdk),软件安装(mysql, nginx, redis).域名解析 三.原型图.代码开发(v ...

  4. Centos6.4 相关配置记录

    1.手动开启eth0网卡 在虚拟机里装完CentOS6.4之后,使用NAT模式,输入ifconfig发现没有IP地址,查找了一下资料,原来是: 在CentOS 6.x的版本中,默认网卡是不开启的,需要 ...

  5. mac 10.11.6 自带apache配置记录

    详细记录使用自带apache的一些问题 开启apache服务 作为2016年的新版本os,在系统偏好设置里没有网络共享了,所以可以通过终端,直接开启apache服务器: 开启apache:sudo a ...

  6. ios开发之Info.plist文件相关配置

    前言:在iOS开发中有些情况下需要对Info.plist文件进行配置,以下介绍几种相关配置.以后遇到需要配置的再更新... 开发环境:swift3.0.1,Xcode8.1 一,项目中需要使用第三方字 ...

  7. sublime text配置记录

    代码编辑器有一直都有在尝试新的,如brackets/vs code/webstrom,最后还是用回sublime,每次要重新安装的时候都需要上网搜索相关配置资料,特些记录,以备下次使用: 下载地址 下 ...

  8. Linux系统下ssh的相关配置详细解析

    Linux系统下ssh的相关配置进行了详细的分析介绍. ssh是大家常用的登录linux服务器的方式,但是为了安全考虑,有时候我们需要针对ssh做一些特殊处理,本文记录笔者曾经做过的一些修改,供大家参 ...

  9. 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

    不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...

随机推荐

  1. windows注册表解析说明

    https://www.cnblogs.com/wfq9330/p/9176654.html

  2. leetcode494

    public class Solution { public int FindTargetSumWays(int[] nums, int S) { Queue<int> Q = new Q ...

  3. VS2017打包设置

    本文为网络贴文,引用于:http://www.cnblogs.com/overstep/p/6942423.html 一.  安装打包插件: 安装打包插件:Microsoft Visual Studi ...

  4. sendmail报错Relaying denied

    配置好sendmail后,使用php的mail()发送邮件,出现 SMTP server response: 550 5.7.1 Relaying denied. IP name lookup fai ...

  5. Xpath延伸以及总结

  6. DJango 基础 (5)

    模板加载静态文件 在settings.py文件中添加STATICFILES_DIRS,设置静态文件目录路径,同templates. # settings.py文件中​STATIC_URL = '/st ...

  7. 二十一、proxyDesign 代理模式

    原理: 时序图: 代码清单: Printable public interface Printable { void setPrinterName(String name); String getPr ...

  8. MySQL安装与启动

    1.MySQL安装包下载 下载地址:https://dev.mysql.com/downloads/mysql/ 这里我的电脑是WIN764位的,大家根据自己的电脑自己选择要下载的包 2.解压安装 解 ...

  9. 字符串的排列(python)

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输 ...

  10. 图论最短路径算法总结(Bellman-Ford + SPFA + DAGSP + Dijkstra + Floyd-Warshall)

    这里感谢百度文库,百度百科,维基百科,还有算法导论的作者以及他的小伙伴们...... 最短路是现实生活中很常见的一个问题,之前练习了很多BFS的题目,BFS可以暴力解决很多最短路的问题,但是他有一定的 ...