swagger 如何获取通过NSwag Studio生成的C#客户端中的默认参数?

b5lpy0ml  于 2022-11-06  发布在  C#
关注(0)|答案(1)|浏览(214)

我在.NET Core 6中有这个控制器端点。我正在使用Swagger和NSwag Studio(最新版本v13.17.0.0)生成C#客户端:

[HttpGet("GetAllMinimalCalculationDtoOfMaterialByLoggedinUser/{isExistingBuildingCalculation:bool?}", Name = "GetAllMinimalCalculationDtoOfMaterialByLoggedinUser")]
[Produces("application/json")]
[ProducesResponseType(typeof(IEnumerable<MinimalCalculationDto>), (int)HttpStatusCode.OK),
    ProducesResponseType((int)HttpStatusCode.InternalServerError)]
public ActionResult GetAllMinimalCalculationDtoOfMaterialByLoggedinUser(bool isExistingBuildingCalculation = false)

但NSwag Studio生成的客户端没有将此参数作为可选参数:

public virtual async System.Threading.Tasks.Task<System.Collections.Generic.ICollection<MinimalCalculationDto>> GetAllMinimalCalculationDtoOfMaterialByLoggedinUserAsync(bool isExistingBuildingCalculation, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
{
    if (isExistingBuildingCalculation == null)
        throw new System.ArgumentNullException("isExistingBuildingCalculation");

    var urlBuilder_ = new System.Text.StringBuilder();
    urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/v1/Calculation/GetAllMinimalCalculationDtoOfMaterialByLoggedinUser/{isExistingBuildingCalculation}");
    urlBuilder_.Replace("{isExistingBuildingCalculation}", System.Uri.EscapeDataString(ConvertToString(isExistingBuildingCalculation, System.Globalization.CultureInfo.InvariantCulture)));

    var client_ = _httpClient;
}

以上是生成的客户端结果,正如我们所看到的,如果参数isExistingBuildingCalculation为空,该结果具有抛出异常的显式代码。此外,在其方法签名中,该结果没有该参数的默认值false。
我想要的情况是,即使空检查仍然存在,那么至少默认值false应该出现在方法签名中,这样我就可以在不传递任何参数的情况下使用生成的方法,也可以在传递参数的情况下使用生成的方法。
我已经尝试在NSwag Studio中设置“生成可选参数”,但也没有任何效果,同样的结果:
NSwag Studio Settings

jtw3ybtb

jtw3ybtb1#

将签名更改为:

[HttpGet("GetAllMinimalCalculationDtoOfMaterialByLoggedinUser/{isExistingBuildingCalculation:bool?}", Name = "GetAllMinimalCalculationDtoOfMaterialByLoggedinUser")]
[Produces("application/json")]
[ProducesResponseType(typeof(IEnumerable<MinimalCalculationDto>), (int)HttpStatusCode.OK),
ProducesResponseType((int)HttpStatusCode.InternalServerError)]
public ActionResult GetAllMinimalCalculationDtoOfMaterialByLoggedinUser(bool? isExistingBuildingCalculation)

相关问题