偷拍厕所女同学-beautyleg 白丝 C#Swagger的创建和使用

beautyleg 白丝 C#Swagger的创建和使用

发布日期:2025-07-04 11:58  点击次数:178

beautyleg 白丝 C#Swagger的创建和使用

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

Swagger 是一个表率且完满的框架,用于生成、描画、调用和可视化 RESTful 作风的 Web 作事。 Swagger 的算计打算是对 REST API 界说一个顺序且和话语无关的接口,不错让东谈主和算计机领有无谓拜谒源码、文档或网罗流量监测就不错发现和交融作事的本领。当通过 Swagger 进行正确界说,用户不错交融云尔作事并使用最少杀青逻辑与云尔作事进行交互。与为底层编程所杀青的接口访佛,Swagger 拔除了调用作事时可能会有的猜度。 Swagger 的上风 维持 API 自动生成同步的在线文档:使用 Swagger 后不错平直通过代码生成文档,不再需要我方手动编写接口文档了,对本领员来说相配便捷beautyleg 白丝,不错揆情审势写文档的时间去学习新时间。 提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还维持在线测试。参数和形势齐定好了,平直在界面上输入参数对应的值即可在线测试接口。

在C#怎么装配Swagger

1.掀开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 本站仅提供存储作事,通盘本色均由用户发布,如发现存害或侵权本色,请点击举报。

相关资讯
热点资讯
  • 友情链接:

Powered by 偷拍厕所女同学 @2013-2022 RSS地图 HTML地图

Copyright © 2013-2022 版权所有