Swagger 是一个表率且完满的框架,用于生成、描画、调用和可视化 RESTful 作风的 Web 作事。 Swagger 的算计打算是对 REST API 界说一个顺序且和话语无关的接口,不错让东谈主和算计机领有无谓拜谒源码、文档或网罗流量监测就不错发现和交融作事的本领。当通过 Swagger 进行正确界说,用户不错交融云尔作事并使用最少杀青逻辑与云尔作事进行交互。与为底层编程所杀青的接口访佛,Swagger 拔除了调用作事时可能会有的猜度。 Swagger 的上风 维持 API 自动生成同步的在线文档:使用 Swagger 后不错平直通过代码生成文档,不再需要我方手动编写接口文档了,对本领员来说相配便捷beautyleg 白丝,不错揆情审势写文档的时间去学习新时间。 提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还维持在线测试。参数和形势齐定好了,平直在界面上输入参数对应的值即可在线测试接口。
在C#怎么装配Swagger1.掀开VS软件找到器用
图片beautyleg 白丝beautyleg 白丝
然后输入Swagger图片
然后找到Swashbuckle并装配图片
装配了之后再找到Swagger.NET.UI并装配图片
2.装配好了之后会在App_Start下生成一个SwaggerConfig的类,咱们找到这个类并掀开图片
找到方法Register修改并替换图片
XML这里填写成我方的图片
找到这个类并扫视图片
当今基本上就大功胜利了!!! 运转方法输入http://localhost:51462/swagger/ 就不错了图片
这里有几个坑要正式一下,不要收受SwaggerUI底下的index运转这么也会报错, 需要我方输入生成的地址http://localhost:我方的端标语/swagger/就不错了 这么完成了之后然则 咱们方法莫得扫视,不维持扫视奈何办呢图片
找到App_Start文献夹并创建SwaggerCacheProvider扶持类public class SwaggerCacheProvider : ISwaggerProvider { private readonly ISwaggerProvider _swaggerProvider; private static ConcurrentDictionary<string, SwaggerDocument> _cache = new ConcurrentDictionary<string, SwaggerDocument>(); private readonly string _xmlPath; /// <summary> /// /// </summary> /// <param name='swaggerProvider'></param> /// <param name='xmlpath'>xml文档旅途</param> public SwaggerCacheProvider(ISwaggerProvider swaggerProvider, string xmlpath) { _swaggerProvider = swaggerProvider; _xmlPath = xmlpath; } public SwaggerDocument GetSwagger(string rootUrl, string apiVersion) { var cacheKey = string.Format('{0}_{1}', rootUrl, apiVersion); //只读取一次 if (!_cache.TryGetValue(cacheKey, out SwaggerDocument srcDoc)) { srcDoc = _swaggerProvider.GetSwagger(rootUrl, apiVersion); srcDoc.vendorExtensions = new Dictionary<string, object> { { 'ControllerDesc', GetControllerDesc() } }; _cache.TryAdd(cacheKey, srcDoc); } return srcDoc; } /// <summary> /// 从API文档中读取适度器描画 /// </summary> /// <returns>通盘适度器描画</returns> public ConcurrentDictionary<string, string> GetControllerDesc() { ConcurrentDictionary<string, string> controllerDescDict = new ConcurrentDictionary<string, string>(); if (File.Exists(_xmlPath)) { XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(_xmlPath); string[] arrPath; int cCount = 'Controller'.Length; foreach (XmlNode node in xmldoc.SelectNodes('//member')) { string type = node.Attributes['name'].Value; if (type.StartsWith('T:')) { arrPath = type.Split('.'); string controllerName = arrPath[arrPath.Length - 1]; if (controllerName.EndsWith('Controller')) //适度器 { //取得适度器扫视 XmlNode summaryNode = node.SelectSingleNode('summary'); string key = controllerName.Remove(controllerName.Length - cCount, cCount); if (summaryNode != null && !string.IsNullOrEmpty(summaryNode.InnerText) && !controllerDescDict.ContainsKey(key)) { controllerDescDict.TryAdd(key, summaryNode.InnerText.Trim()); } } } } } return controllerDescDict; } }
这个类的大致原理即是找到咱们之前生成的XML并加载然后找到咱们添加的扫视本色并生成对应参数复返给前台 是以咱们还需要添加一个js
图片
找到文献夹Scripts添加swagger的js'use strict'; window.SwaggerTranslator = { _words: [], translate: function () { var $this = this; $('[data-sw-translate]').each(function () { $(this).html($this._tryTranslate($(this).html())); $(this).val($this._tryTranslate($(this).val())); $(this).attr('title', $this._tryTranslate($(this).attr('title'))); }); }, setControllerSummary: function () { $.ajax({ type: 'get', async: true, url: $('#input_baseUrl').val(), dataType: 'json', success: function (data) { var summaryDict = data.ControllerDesc; var id, controllerName, strSummary; $('#resources_container .resource').each(function (i, item) { id = $(item).attr('id'); if (id) { controllerName = id.substring(9); strSummary = summaryDict[controllerName]; if (strSummary) { $(item).children('.heading').children('.options').first().prepend('<li class='controller-summary' title='' + strSummary + ''>' + strSummary + '</li>'); } } }); } }); }, _tryTranslate: function (word) { return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word; }, learn: function (wordsMap) { this._words = wordsMap; } }; /* jshint quotmark: double */ window.SwaggerTranslator.learn({ 'Warning: Deprecated': '劝诫:已过期', 'Implementation Notes': '杀青备注', 'Response Class': '反应类', 'Status': '气象', 'Parameters': '参数', 'Parameter': '参数', 'Value': '值', 'Description': '描画', 'Parameter Type': '参数类型', 'Data Type': '数据类型', 'Response Messages': '反应音讯', 'HTTP Status Code': 'HTTP 气象码', 'Reason': '原因', 'Response Model': '反应模子', 'Request URL': '肯求 URL', 'Response Body': '反应体', 'Response Code': '反应码', 'Response Headers': '反应头', 'Hide Response': '遮拦反应', 'Headers': '头', 'Try it out!': '试一下!', 'Show/Hide': '显现/遮拦', 'List Operations': '显现操作', 'Expand Operations': '伸开操作', 'Raw': '原始', 'can't parse JSON. Raw result': '无法领略 JSON。原始效力', 'Model Schema': '模子架构', 'Model': '模子', 'apply': '欺诈', 'Username': '用户名', 'Password': '密码', 'Terms of service': '作事条件', 'Created by': '创建者', 'See more at': '稽查更多:', 'Contact the developer': '关系开发者', 'api version': 'api 版块', 'Response Content Type': '反应 Content Type', 'fetching resource': '正在取得资源', 'fetching resource list': '正在取得资源列表', 'Explore': '浏览', 'Show Swagger Petstore Example Apis': '显现 Swagger Petstore 示例 Apis', 'Can't read from server. It may not have the appropriate access-control-origin settings.': '无法从作事器读取。可能莫得正确开发 access-control-origin。', 'Please specify the protocol for': '请指定公约:', 'Can't read swagger JSON from': '无法读取 swagger JSON于', 'Finished Loading Resource Information. Rendering Swagger UI': '已加载资源信息。正在渲染 Swagger UI', 'Unable to read api': '无法读取 api', 'from path': '从旅途', 'server returned': '作事器复返' }); $(function () { window.SwaggerTranslator.translate(); window.SwaggerTranslator.setControllerSummary(); });
这里的js添加完成正式少量这里要设成镶嵌资源
图片
开发完成之后,咱们下一步细则要注册这个资源,于是咱们又要回到之前的SwaggerConfig上头
AV天堂public static void Register() { //var thisAssembly = typeof(SwaggerConfig).Assembly; 取得方法文献旅途 //var baseDirectory = AppDomain.CurrentDomain.BaseDirectory + @'\App_Data\'; //var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + '.XML'; //var commentsFile = Path.Combine(baseDirectory, commentsFileName); GlobalConfiguration.Configuration .EnableSwagger(c => { //用于启用和开发Swagger的成就信息。 c.SingleApiVersion('v2', '测试 API 接口文档'); c.IncludeXmlComments($@'{System.AppDomain.CurrentDomain.BaseDirectory}\bin\TestSwaggerList.xml'); //取得方法指定旅途下xml文献 c.CustomProvider((defaultProvider) => new SwaggerCacheProvider(defaultProvider, $@'{System.AppDomain.CurrentDomain.BaseDirectory}\bin\TestSwaggerList.xml')); }) .EnableSwaggerUi(c => { //用于启用UI界面上的东西。 //加载汉化的js文献,正式 swagger.js文献属性必须开发为“镶嵌的资源”。 APIUI.Scripts.swagger.js范例是:方法称呼->文献夹->js文献名 c.InjectJavaScript(Assembly.GetExecutingAssembly(), 'TestSwaggerList.Scripts.swagger.js'); }); }
图片
当今咱们就去方法写个扫视试试吧图片
然后运转方法图片
这么就算大功胜利了,诚然内部有可能有其他特别荒谬莫得处治,比如多个方法同名奈何办????但愿大家沿途共享一同朝上,谢谢大家 demo下载地址:swagger 本站仅提供存储作事,通盘本色均由用户发布,如发现存害或侵权本色,请点击举报。