最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Asp.net6.0?Swagger使用問題及解決過程

 更新時(shí)間:2022年05月05日 14:37:04   作者:毛毛蟲  
這篇文章主要介紹了Asp.net6.0?Swagger使用備忘,文中介紹了在Docker中顯示OpenApiInfo的中文內(nèi)容,顯示xml注釋及如何顯示Header的問題,需要的朋友可以參考下

“五一”期間用了一下Swagger,碰到了以下問題:

  • 如何在Docker中顯示OpenApiInfo的中文內(nèi)容;
  • 如何顯示xml注釋;
  • 如何顯示Header;
  • 如何隱藏ApiController、Action、類或者屬性,如何顯示枚舉

現(xiàn)將解決辦法記下留存。

一、在Docker中顯示OpenApiInfo的中文內(nèi)容

builder.Services.AddSwaggerGen(options =>
{
    options.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "xxx Api調(diào)用說明",
        Description = "巴拉巴拉的一堆描述",
        License = new OpenApiLicense
        {
            Name = "Api調(diào)用須知",
            Url = new Uri("http://xxx.com/readmi.html")
        }
    });

});

以上設(shè)置的效果

然而發(fā)布到Docker以后,中文亂碼了(似乎在Program.cs里面輸入的中文都會(huì)亂碼)。我的解決的辦法是:
builder.Services.AddSwaggerGen(ProgramHelper.SwaggerSetup);

using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace SwaggerDemo;
public static class ProgramHelper
{
    public static void SwaggerSetup(SwaggerGenOptions options)
    {
        options.SwaggerDoc("v1", new OpenApiInfo
        {
            Version = "v1",
            Title = "xxx Api調(diào)用說明",
            Description = "巴拉巴拉的一堆描述",
            License = new OpenApiLicense
            {
                Name = "Api調(diào)用須知",
                Url = new Uri("http://xxx.com/readmi.html")
            }
        });
    }
}

問題解決,但有點(diǎn)脫褲子放屁,不知道有沒有不需要脫褲子的方法。

二、顯示xml注釋

這個(gè)微軟文檔說的很清楚,這里記一下網(wǎng)址備查。

三、如何顯示Header

辦法如下:

public class SwaggerHeaderAttribute : Attribute { }
public class SwaggerOperationFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        if (context.ApiDescription.CustomAttributes().Any(ii => ii.GetType() == typeof(SwaggerHeaderAttribute))
            || context.ApiDescription.ActionDescriptor.EndpointMetadata.Any(ii => ii.GetType() == typeof(SwaggerHeaderAttribute)))
        {
            if (operation.Parameters == null)
                operation.Parameters = new List<OpenApiParameter>();
            operation.Parameters.Add(new OpenApiParameter
            {
                Name = "Sign",
                In = ParameterLocation.Header,
                Description = "我的簽名是這個(gè)生成的,巴拉巴拉巴拉",
                Required = true
            });
        }
    }
}

然后在SwaggerSetup里面添加一行
options.OperationFilter<SwaggerOperationFilter>();
在ApiController或者Action前面添加一行[SwaggerHeader]

四、隱藏ApiController、Action、類或者屬性,顯示枚舉

想把1、2隱藏起來,把

public enum ECode
{
    成功,
    [Description("時(shí)間戳錯(cuò)誤")]
    Timestamp,
    [Description("簽名錯(cuò)誤")]
    Sign
    
}

顯示成3的樣子,辦法如下:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Enum | AttributeTargets.Field)]
public partial class SwaggerIgnoreAttribute : Attribute { }
public class SwaggerSchemaFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        #region 給設(shè)置了SwaggerIgnoreAttribute特性的類作個(gè)標(biāo)記,以便在DocumentFilter里面移除整個(gè)架構(gòu)
        if (context.Type.GetCustomAttribute<SwaggerIgnoreAttribute>() != null)
        {
            schema.Title = "Remove"; 
        }
        #endregion
        
        else
        {
            if (context.Type.IsEnum)
            {
                #region 設(shè)置枚舉的描述
                List<string> titleItems = new List<string>();
                foreach (var e in Enum.GetValues(context.Type))
                {
                    if (context.Type.GetField(e.ToString()).GetCustomAttribute<SwaggerIgnoreAttribute>() == null)
                    {
                        titleItems.Add($"{(int)e}:{context.Type.GetField(e.ToString()).GetCustomAttribute<DescriptionAttribute>()?.Description ?? e}");
                    }
                }
                schema.Description = string.Join(";", titleItems);
                #endregion
            }
            else
            {
                #region 移除設(shè)置了SwaggerIgnoreAttribute特性的屬性
                foreach (var propertyName in context.Type.GetProperties().Where(ii => ii.GetCustomAttribute<SwaggerIgnoreAttribute>() != null).Select(ii => ii.Name))
                    schema.Properties.Remove(propertyName);
                #region
            }
        }
    }
}
public class SwaggerDocFilter : IDocumentFilter
{
    public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
    {
        //移除在SchemaFilter作了標(biāo)記的架構(gòu)
        foreach (var key in swaggerDoc.Components.Schemas.Where(ii => ii.Value.Title == "Remove"))
            swaggerDoc.Components.Schemas.Remove(key);
        #region 移除設(shè)置了SwaggerIgnoreAttribute特性的ApiController
        var ignoreApis = context.ApiDescriptions.Where(wh => wh.ActionDescriptor.EndpointMetadata.Any(any => any is SwaggerIgnoreAttribute));
        if (ignoreApis != null)
        {
            foreach (var ignoreApi in ignoreApis)
            {
                swaggerDoc.Paths.Remove("/" + ignoreApi.RelativePath);
            }
        }
        #endregion
    }
}

照例需要在在SwaggerSetup里面添加兩行
options.SchemaFilter<SwaggerSchemaFilter>();
options.DocumentFilter<SwaggerDocFilter>();
然后給隱藏的內(nèi)容添加[SwaggerIgnore]

如此,大致達(dá)到了我的目的,但存兩點(diǎn)不爽:

  • 脫褲子
  • 隱藏類的方式

到此這篇關(guān)于Asp.net6.0 Swagger使用備忘的文章就介紹到這了,更多相關(guān)Asp.net6.0 Swagger使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ASP.NET 頁面中動(dòng)態(tài)增加的控件、添加事件

    ASP.NET 頁面中動(dòng)態(tài)增加的控件、添加事件

    在ASP.NET中動(dòng)態(tài)創(chuàng)建一個(gè)控件總是不那么順利,特別是當(dāng)對(duì)頁面的Life Cycle不是那么了然的情況下!這里簡單描述一下要求,然后提供一個(gè)解決方案,大家看看有沒有更好的Idea,如果有的話就是我的大幸了,呵呵!
    2009-07-07
  • .NET 排序 Array.Sort<T> 實(shí)現(xiàn)示例

    .NET 排序 Array.Sort<T> 實(shí)現(xiàn)示例

    System.Array.Sort<T> 是.NET內(nèi)置的排序方法, 本文就詳細(xì)的介紹一下具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-09-09
  • datalist,Repeater和Gridview的區(qū)別分析

    datalist,Repeater和Gridview的區(qū)別分析

    datalist,Repeater和Gridview的區(qū)別分析,需要的朋友可以參考一下
    2013-03-03
  • ADO調(diào)用分頁查詢存儲(chǔ)過程的實(shí)例講解

    ADO調(diào)用分頁查詢存儲(chǔ)過程的實(shí)例講解

    下面小編就為大家分享一篇ADO調(diào)用分頁查詢存儲(chǔ)過程的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • asp.net core 系列之并發(fā)沖突的深入理解

    asp.net core 系列之并發(fā)沖突的深入理解

    這篇文章主要介紹了asp.net core 系列之并發(fā)沖突的深入理解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • .NET微信公眾號(hào)查看關(guān)注者接口

    .NET微信公眾號(hào)查看關(guān)注者接口

    這篇文章主要為大家詳細(xì)介紹了.NET微信公眾號(hào)查看關(guān)注者接口的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • .NET裝飾模式講解

    .NET裝飾模式講解

    這篇文章主要為大家詳細(xì)介紹了ASP.NET裝飾模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • WPF使用Canvas畫布面板布局

    WPF使用Canvas畫布面板布局

    這篇文章介紹了WPF使用Canvas畫布面板布局的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Asp.Net 動(dòng)態(tài)頁面轉(zhuǎn)靜態(tài)頁面主要代碼

    Asp.Net 動(dòng)態(tài)頁面轉(zhuǎn)靜態(tài)頁面主要代碼

    關(guān)于在Asp.Net中動(dòng)態(tài)頁面轉(zhuǎn)靜態(tài)頁面的方法網(wǎng)上比較多。結(jié)合實(shí)際的需求,我在網(wǎng)上找了一些源代碼,并作修改?,F(xiàn)在把修改后的代碼以及說明寫一下。
    2009-12-12

最新評(píng)論

东辽县| 连江县| 钟祥市| 武乡县| 柘城县| 和田市| 罗山县| 永平县| 莫力| 民权县| 渭源县| 中江县| 什邡市| 康马县| 焉耆| 抚顺县| 台中市| 丰都县| 天长市| 潞城市| 布拖县| 象山县| 若尔盖县| 桃江县| 福海县| 安宁市| 即墨市| 朝阳县| 邓州市| 内黄县| 昭平县| 平利县| 乐平市| 沾益县| 德格县| 台北市| 加查县| 沙雅县| 彭水| 霸州市| 韩城市|