【问题标题】:API with optional query string is losing the route value带有可选查询字符串的 API 正在丢失路由值
【发布时间】:2018-10-20 17:54:01
【问题描述】:

我想要一个 WebAPI 路径,该路径接受一个 Id,但也接受一个可选查询。

所以,通常情况下,客户端会发送:

http://localhost:49487/api/template/5b31b31c-ecd9-4e7a-bcdb-1c263399c86f

但有时,我需要在有效负载中返回一些额外的细节。所以我希望他们发送:

http://localhost:49487/api/template/5b31b31c-ecd9-4e7a-bcdb-1c263399c86f?IncludePreview=true

我的 .Net Web API Controller enpoint 是这样定义的,并处理第一种情况。

[Route("{Id}"), HttpGet]
public IActionResult GetTemplate(Guid Id, bool IncludePreview = false)

但是,一旦我发送了第二个版本,带有查询字符串,api 控制器就会触发(我有一个断点),但是,Id 始终是 Guid.Empty。

如何让我的 API 方法同时接受这两个版本?还是我需要为这两个版本创建一个单独的端点?

【问题讨论】:

  • 将其更改为 [FromQuery] bool IncludePreview
  • MVC 带有[FromQuery] 属性,该属性将数据的绑定限制为仅查询字符串,但如果我们使用它,它仍然将它们视为可选
  • 代码是针对asp.net-core的,但是你的标签是针对asp.net-web-api的,它通常与旧版本的web api相关联。是哪个?

标签: c# asp.net-web-api


【解决方案1】:

您将“包括预览”布尔值指定为固定值。因此,尽管您的调用在 GetTemplate 方法中捕获了 IncludePreview=true,但它会被重新分配。请尝试使用可空的布尔值,并将“空”作为赋值。

public IActionResult GetTemplate(Guid Id, bool? IncludePreview=null)

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 2011-01-16
    • 2014-09-05
    • 2014-03-05
    • 2015-11-04
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多