探花巨乳
hentai 动漫 河南开封辉煌上河园推出中国旅游日优惠_大皖新闻 | 安徽网... 探花 眼镜妹 驻越南使馆教导在越中国公民严防督察台风“摩羯”... 王二小电影 俄罗斯货轮卸货伊朗导弹与乌克兰反击... 王二小电影 吉林遭浙江大逆转吞2连败:琼斯狂轰46+11 平本季最高分记载... 丁香五月 国运齿轮运转折掸:中国股市暴涨,日本股市狂跌...
touch99地址>>你的位置:探花巨乳 > touch99地址 > 王二小电影 C#Swagger的创建和使用

王二小电影 C#Swagger的创建和使用

发布日期:2025-03-18 04:38    点击次数:70

王二小电影 C#Swagger的创建和使用

C# 中 swagger Swagger的先容在C#怎样装配Swagger Swagger的先容

Swagger 是一个要领且齐全的框架,用于生成、刻画、调用和可视化 RESTful 作风的 Web 事业。 Swagger 的见解是对 REST API 界说一个圭臬且和言语无关的接口,不错让东谈主和计较机领有不消拜谒源码、文档或网罗流量监测就不错发现和相识事业的才智。当通过 Swagger 进行正确界说,用户不错相识辛勤事业并使用最少已毕逻辑与辛勤事业进行交互。与为底层编程所已毕的接口访佛,Swagger 扬弃了调用事业时可能会有的预计。 Swagger 的上风 扶植 API 自动生成同步的在线文档:使用 Swagger 后不错径直通过代码生成文档,不再需要我方手动编写接口文档了,对体式员来说极端便捷,不错从简写文档的时分去学习新技巧。 提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还扶植在线测试。参数和体式齐定好了王二小电影,径直在界面上输入参数对应的值即可在线测试接口。

在C#怎样装配Swagger

1.掀开VS软件找到器具

图片王二小电影

然后输入Swagger

图片

然后找到Swashbuckle并装配

图片

装配了之后再找到Swagger.NET.UI并装配

图片

2.装配好了之后会在App_Start下生成一个SwaggerConfig的类,咱们找到这个类并掀开

图片

找到时势Register修改并替换

图片

12色吧 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上头

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 本站仅提供存储事业,所有这个词实质均由用户发布,如发现存害或侵权实质,请点击举报。

首页 新金瓶梅 touch99地址 免费最新伦理电影 丝袜控 日韩成人影片 婷婷色情

Powered by 探花巨乳 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群系统 © 2013-2024