很好用的API管理--Sawgger
Posted 打你的小熊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了很好用的API管理--Sawgger相关的知识,希望对你有一定的参考价值。
1.打开NuGet程序包
2.安装下面两个程序包
3.安装完后会出现SwaggerConfig.cs类,并修改里面的内容
代码:
[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")] namespace WebApplication1 { public class SwaggerConfig { public static void Register() { var thisAssembly = typeof(SwaggerConfig).Assembly; GlobalConfiguration.Configuration .EnableSwagger(c => { c.SingleApiVersion("v1", "WebApp");
c.IncludeXmlComments(GetXmlCommentsPath());
}) } private static string GetXmlCommentsPath() { return $@"{System.AppDomain.CurrentDomain.BaseDirectory}\\bin\\WebApi.XML"; } }
4.添加WebApi.cs类
代码:
namespace WebApi { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi1", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "DefaultApi2", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { action="get",id = RouteParameter.Optional } ); } } }
5.修改Global.asax类
代码:
public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); GlobalConfiguration.Configure(WebApiConfig.Register); //这是要加的 } }
6.设置需要调试的类
7.设置生成的XML文档
8.运行项目,打开浏览器输入http://localhost:23092/swagger/
结果展示:
注意:
在使用Swagger WebApi文档框架时,一个Controll中写多个Post接口时,在MVC4中会提示无法识别的多个post请求,原因是WebApiConfig中默认路由配置中是没有配置{action}引起的。
【在MVC5中没有此问题,原因是MVC5有Route[" "]特性,MVC4中不支持】
解决方案:
方法1:修改WebApiConfig文件
//默认配置 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); //修改后配置 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
方法2:MVC5中可以不修改默认配置文件,而使用Route特性来指定
/// <summary> /// POST请求1 /// ///api/Member /// </summary> /// <param name="value"></param> public void Post([FromBody]string value) { } /// <summary> /// POST请求2 /// api/Member/Login /// </summary> /// <param name="loginId"></param> /// <param name="password"></param> /// <returns></returns> [HttpPost, Route("api/Member/Login")] public string Login([FromBody]string loginId, [FromBody]string password) { return ""; }
附带:隐藏接口
在使用Swagger需要隐藏不开放的API
可以在SwaggerConfig.cs中加入
/// <summary> /// 隐藏接口,不生成到swagger文档展示 /// </summary> [System.AttributeUsage(System.AttributeTargets.Method | System.AttributeTargets.Class)] public partial class HiddenApiAttribute : System.Attribute { } public class HiddenApiFilter : IDocumentFilter { /// <summary> /// 重写Apply方法,移除隐藏接口的生成 /// </summary> /// <param name="swaggerDoc">swagger文档文件</param> /// <param name="schemaRegistry"></param> /// <param name="apiExplorer">api接口集合</param> public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer) { foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions) { if (Enumerable.OfType<HiddenApiAttribute>(apiDescription.GetControllerAndActionAttributes<HiddenApiAttribute>()).Any()) { string key = "/" + apiDescription.RelativePath; if (key.Contains("?")) { int idx = key.IndexOf("?", System.StringComparison.Ordinal); key = key.Substring(0, idx); } swaggerDoc.paths.Remove(key); } } } }
并且在SwaggerConfig.cs 中加入
c.DocumentFilter<HiddenApiFilter>();
搞定
以上是关于很好用的API管理--Sawgger的主要内容,如果未能解决你的问题,请参考以下文章