Swagger相关配置记录
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相关配置记录的更多相关文章
- Vue-cli 多页相关配置记录
Vue-cli 多页相关配置记录 搭建一个顺手的MPA项目脚手架,其实根据项目的不同目录结构和打包配置都可以进行灵活的调整.这次的项目可能是包含各种客户端和管理后台在一起的综合项目所以需要将样式和脚本 ...
- nginx的相关配置记录和总结
前言 本文旨在对nginx的各项配置文件和参数做一个记录和总结. 原因是在配置框架和虚拟目录,web语言解析的nginx环境的时候遇到各种问题和参数,有时百度可以解决,有时直接复制粘贴,大都当时有些记 ...
- 个人网站搭建时linux中的相关配置记录(mysql,jdk,nginx,redis)
一.开发计划(包括准备工作,网站大致需求等) 二.服务器(linux/centos)购买.相应环境配置(jdk),软件安装(mysql, nginx, redis).域名解析 三.原型图.代码开发(v ...
- Centos6.4 相关配置记录
1.手动开启eth0网卡 在虚拟机里装完CentOS6.4之后,使用NAT模式,输入ifconfig发现没有IP地址,查找了一下资料,原来是: 在CentOS 6.x的版本中,默认网卡是不开启的,需要 ...
- mac 10.11.6 自带apache配置记录
详细记录使用自带apache的一些问题 开启apache服务 作为2016年的新版本os,在系统偏好设置里没有网络共享了,所以可以通过终端,直接开启apache服务器: 开启apache:sudo a ...
- ios开发之Info.plist文件相关配置
前言:在iOS开发中有些情况下需要对Info.plist文件进行配置,以下介绍几种相关配置.以后遇到需要配置的再更新... 开发环境:swift3.0.1,Xcode8.1 一,项目中需要使用第三方字 ...
- sublime text配置记录
代码编辑器有一直都有在尝试新的,如brackets/vs code/webstrom,最后还是用回sublime,每次要重新安装的时候都需要上网搜索相关配置资料,特些记录,以备下次使用: 下载地址 下 ...
- Linux系统下ssh的相关配置详细解析
Linux系统下ssh的相关配置进行了详细的分析介绍. ssh是大家常用的登录linux服务器的方式,但是为了安全考虑,有时候我们需要针对ssh做一些特殊处理,本文记录笔者曾经做过的一些修改,供大家参 ...
- 一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移
不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.superviso ...
随机推荐
- VS2015+Opencv3.2配置(一次配好)
对于 VS2015+QT5.8的配置我就不介绍了,由于我配置的比较早,具体有的东西忘掉了,大家可以参考下面这几篇文章. 留白留白留白留白留白(稍后补) 对于Opencv+VS的配置是我重点要说的内容. ...
- Linux命令行报错 bash: cannot create temp file for here-document: No space left on device
今天Linux服务器出问题了,使用"tab"补全命令时,提示 bash: cannot create temp file for here-document: No space l ...
- 记账本,C,Github,util
package util; import java.awt.Component; import java.awt.Dimension; import javax.swing.JButton; impo ...
- 搭建EOS环境
[搭建EOS环境] 1.Ubuntu 18.04 下安装eosio wget https://github.com/eosio/eos/releases/download/v1.4.4/eosio_1 ...
- java使用poi生成导出Excel(新)
导出样式: java代码: import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStre ...
- Pandas合并数据集之merge、join方法
合并数据集 pandas.merge 可根据一个或多个键将不同DataFrame中的行连接起来. pandas.concat 可以沿着一条轴将多个对象堆叠到一起. combine_first merg ...
- Spring MVC 自动为对象注入枚举类型
原文地址:http://1358440610-qq-com.iteye.com/blog/2079048 如果一个对象里面有枚举类型的话,则Spring MVC是不能够直接进行注入的,因为它只实现了一 ...
- Mark,20180127,技术博客之路开启!
不怎么会说话,自己本身少说话的撸码loner,少说多做.毕业从事手游一年多,之前主要从事Cocos2dx,刚转投Unity不到一个月,后面主要总结下自己在这两方面开发过程中的一些历程,希望自己能有所积 ...
- 2018 宁夏省赛 F. Moving On
题目链接 https://nanti.jisuanke.com/t/28406 大意是 有n(<=200)个城市,城市间有路(Input给了邻接矩阵) 每个城市有一个危险值,然后是q(2e4) ...
- includes() 方法
字符串的includes()和数组中的includes()判断有没有括号里面的值,有的话为true,没有为false. 详细解析:https://blog.csdn.net/wu_xianqiang/ ...