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. [UGUI]Image源码分析

    unity版本5.3.5 一.属性 1.overrideSprite 脚本对精灵的访问均使用overrideSprite,如果m_OverrideSprite存在就使用m_OverrideSprite ...

  2. 批量IP自动ping脚本

    批量IP自动ping脚本ping.sh 在同一目录新建一个名为pingip的文件,并以每行一个IP的方式罗列.使用sh命令执行ping.sh #!/bin/bash IP_LIST=`cat ping ...

  3. leetcode208

    class TrieNode { public: // Initialize your data structure here. TrieNode() { words=; prefixs=; ;i&l ...

  4. Object.defineProperty(o,p,descriptor ) 理解应用

    1. Object.defineProperty  在一个对象上定义一个新属性,或修改一个已经存在的属性, 最终返回这个对象. var __define = this.__define || func ...

  5. 最适合入门的Laravel中级教程(二)用户认证

    之前的初级教程主要是学习简单的增删改查: 接着的中级教程的目标是在初级教程的基础上能写出更复杂更健壮的程序: 我们先来学习 laravel 的用户认证功能: 在现代网站中基本都有用户系统: 而我们每开 ...

  6. FlannBasedMatcher 立体匹配

    #include "opencv2/core/core.hpp" #include "opencv2/features2d/features2d.hpp" #i ...

  7. WMS专业术语&系统功能操作培训

    逻辑层:公司.分部.地区物理层:仓库.1个仓库只能属于思维的1个地区.命名规则:SCPRD_WMWHSE1货主:纳思达多货主:1个仓库可以配置1个或多个货主SKU:物料代码(stock keeping ...

  8. db2开启监控monitor 查看快照snapshot

    ths   https://blog.csdn.net/huaishu/article/details/9671771 #查看监控器 db2 get monitor switches #打开监控器db ...

  9. 十、Strategy 策略模式

    需求:使用不同的算法解决相同的问题 设计原理: 代码清单: 接口 Strategy public interface Strategy { public abstract Hand nextHand( ...

  10. Block学习总结

    最近网上浏览了一些关于Block的文章,自己进行一下消化吸收. Void (^blockName)(parma)-> Block声明 Void (^) (parma){};  ->Bloc ...