【问题标题】:How do I use query parameters in attributes?如何在属性中使用查询参数?
【发布时间】:2020-04-24 12:49:29
【问题描述】:

我想在我的端点属性中使用查询参数,但我不确定如何使用它们。

我试过这个:

[HttpPost("fooBar/{version}?amount={amount}&date={date}")]

但是我得到了这个错误:

Microsoft.AspNetCore.Routing.Patterns.RoutePatternException:文字部分 '?amount=' 无效。文字部分不能包含“?”特点。 在 Microsoft.AspNetCore.Routing.Patterns.RoutePatternParser.Parse(字符串模式)

或者,如果我想访问一个看起来像上面的端点,那么设置查询参数的正确方法是什么?

【问题讨论】:

  • 简单:你不知道。
  • @John_ReinstateMonica 那么正确的方法是什么?
  • @Euridice01 不要在路由模板中使用它们,一旦动作中有匹配的参数,它们就会被包含在内。
  • @Nkosi 你能提供一个正确方法的例子吗?我还在使用带有 .net 核心的 MediatR。不确定这是否也会改变。

标签: c# asp.net-core query-parameters mediatr asp.net-core-routing


【解决方案1】:

不要在路由模板中使用它们,一旦动作中有匹配的参数,它们就会被包含进来。

//POST fooBar/v2?amount=1234&date=2020-01-06
[HttpPost("fooBar/{version}")]
public IActionResult FooBar(string version, int amount,  DateTime date) {
    //...
}

或者使用属性明确说明它们的来源

//POST fooBar/v2?amount=1234&date=2020-01-06
[HttpPost("fooBar/{version}")]
public IActionResult FooBar([FromRoute]string version, [FromQuery]int amount,  [FromQuery]DateTime date) {
    //...
}

参考Model Binding in ASP.NET Core

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2019-07-24
    • 2016-06-17
    相关资源
    最近更新 更多