簡體   English   中英

NSwagStudio,在使用 NSwag 生成的客戶端方法名稱中包含 Http 請求方法名稱

[英]NSwagStudio, include Http request method name in client method names generated with NSwag

我使用 NSwagStudio 為 a.Net Core 3.1 API 生成 Angular 客戶端。 API 包括可用於多種 Http 請求類型(例如 POST、GET)的端點。 客戶端為每個請求生成一個具有相同基本名稱和數字的方法。

該模式包含一個支持GETPOST請求的端點 / /contract ,以及一個支持GETPOSTDELETE請求的端點/contract/{ID}

生成的客戶端具有如下方法:

  • 沒有 ID 的 GET 請求的ContractAsync
  • Contract2Async用於沒有 ID 的 POST 請求
  • 帶有 ID 的 GET 請求的Contract3Async
  • 帶有 ID 的 POST 請求的Contract4Async
  • 帶有 ID 的 DELETE 請求的Contract5Async

我希望它生成名為:

  • GetContractAsync用於沒有 ID 的 GET 請求
  • PostContractAsync用於沒有 ID 的 POST 請求

ETC

問題的答案是“實現並提供自己的 IOperationNameGenerator”參見https://stackoverflow.com/a/49935417/4180382

我不知道如何實現和提供這個 IOperationNameGenerator。

“Web Api 通過反射”選項卡包含幾個自定義實現,但未提及“IOOperationNameGenerator”

如何實現 IOperationNameGenerator?

在您的 Startup.cs 中執行以下操作:

services.AddSwaggerGen(c =>
{
    ...
    c.CustomOperationIds(d => d.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor ? controllerActionDescriptor.MethodInfo.Name : d.ActionDescriptor.AttributeRouteInfo?.Name);
});

同樣也可以通過c.SwaggerGeneratorOptions.OperationIdSelector設置

請注意, ActionDescriptor.AttributeRouteInfo?.Name是我在源代碼中使用的默認值here

暫無
暫無

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

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