【问题标题】:NSwag generated client not sending two parametersNSwag 生成的客户端不发送两个参数
【发布时间】:2020-01-28 17:52:31
【问题描述】:

我有一个使用 .NET Core 2.2 的 API 项目,其中包含一个带有两个参数的调用:

[HttpGet(nameof(VerifyCreds))]
[Route("VerifyCreds/{fName}/{lName}")]
public ActionResult<List<VerifyCredsModel>> VerifyCreds(string fName, string lName)
{
   var result = _service.VerifyCreds(fName, lName);

   return result;
}

直接从 API 调用时,此调用工作正常。参数通过,正确的数据通过参数过滤器传递。

在.NET Core 3.0 项目中使用nswag 生成客户端时,客户端代码似乎看到了参数,但是当创建了url(即“urlBuilder”字符串)时,它只是调用了基本API 方法,没有任何参数,因此它会返回所有记录。我已经从客户端到 api 逐步完成了它,并且参数没有通过网络实现。我最初将它们作为可选参数,但在阅读不支持可选参数后我删除了所有这些(仍然如此吗?)。

当使用 2 个参数时,我必须做一些不同的事情吗?还是我做错了什么?

【问题讨论】:

  • 能否为 NSwag 生成的这个方法添加客户端代码?
  • 原来是“Route”属性导致了这种情况——如果我删除它,一切正常。显然这把事情搞砸了。我还能够让它与路由和添加到参数的 [FromQuery] 属性一起使用。
  • 为什么不用[FromRoute] 属性标记参数呢?可能没有它 NSwag 无法理解如何添加参数
  • Route 属性是否需要或在某些方面有用?这些调用似乎在没有它们且没有任何其他属性的情况下工作。
  • 好吧,他们让事情变得明确。我认为,如果您从 Route 中删除参数,则没有属性的输入参数将变得像用 [FromQuery] 注释一样。

标签: c# api nswag


【解决方案1】:

我发现有两种方法可以解决这个问题:

一个。在参数中添加 [FromQuery] 属性:

[HttpGet(nameof(VerifyCreds))]
[Route("VerifyCreds/{fName}/{lName}")]
public ActionResult<List<VerifyCredsModel>> VerifyCreds([FromQuery]string fName, [FromQuery]string lName)
    {
       var result = _service.VerifyCreds(fName, lName);

       return result;
    }

b.移除路由属性:

[HttpGet(nameof(VerifyCreds))]
public ActionResult<List<VerifyCredsModel>> VerifyCreds(string fName, string lName)
    {
       var result = _service.VerifyCreds(fName, lName);

       return result;
    }

如果有人有更多关于是否首选的详细信息,请告诉我。否则,我现在选择选项 2。

【讨论】:

    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 2018-11-09
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2020-04-11
    • 2021-07-27
    相关资源
    最近更新 更多