簡體   English   中英

在 NSwag/ApiExplorer 中自定義參數

[英]Customize parameter in NSwag/ApiExplorer

我正在使用 NSwag 為我的 ASP.NET 6 API 生成一個 Swagger 文檔。 我的應用程序使用強類型 id,它們是具有 value 屬性的簡單記錄。

public record Id(Guid Value);

此類 id 用作控制器方法中的參數。 例子:

public class MyController
{
    [HttpPost]
    public void Test(Id id)  {}
}

執行明智這工作正常。 我有一個自定義模型綁定器以及一個自動處理來自 GUID 字符串的綁定的工廠。 自定義 json 轉換器處理這個的序列化也是如此。 為了確保 NSwag 正確生成字符串屬性,我有一個類型映射器,它將 Id 屬性映射為模型中的字符串。

剩下的唯一問題是 NSwag 為我的控制器操作生成奇怪的輸入參數。 它最終看起來像這樣:

在此處輸入圖像描述

我能夠深入研究 NSwag 的代碼並找到生成參數的相應代碼。 OperationParameterProcessor使用 ASP.NET 提供的 api explorer 生成的數據。 api explorer 似乎錯誤地解釋了這個屬性,因此生成了兩個參數而不是一個參數。

我找不到任何有關如何自定義 api 瀏覽器行為的資源,以便您可以自定義模型。 如何讓 ASP.NET 相信我的 Id 對象只是一個普通字符串而不是復雜對象?

似乎添加一個偽類型轉換器就可以了。 我用自定義類型轉換器裝飾了我的Id

internal class IdentityObjectTypeConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) =>
        sourceType == typeof(string);
}

雖然此轉換器本身不處理值轉換,但它確實為 ASP.NET 提供了足夠的元數據,以便 Api Explorer 生成正確的定義。 我更喜歡類型轉換器而不是模型綁定器,但是類型轉換器在多態性方面不夠靈活。

最后,類型轉換器偽造類型,而模型綁定器進行實際綁定。 這並不理想,但可能是最好的解決方案,只要類型轉換器在轉換值時缺少正確的元數據。

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM