![](/img/trans.png)
[英]Cannot resolve parameter 'Microsoft.AspNetCore.Mvc.ApiExplorer.IApiDescriptionGroupCollectionProvider apiDescriptionsProvider
[英]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.