【问题标题】:ASP.NET Core 2 MVC App "POCO" Model binding not bindingASP.NET Core 2 MVC App“POCO”模型绑定未绑定
【发布时间】:2017-10-17 12:10:58
【问题描述】:

我有一个非常基本的 ASP.NET Core 2 Web 应用程序(没有剃刀视图,只有带有 json 响应的 MvcCore)。

我正在尝试在 Postman 中执行一个非常简单的 GET 请求,而我的控制器操作没有将查询字符串参数绑定到我的自定义 POCO。

这是邮递员尝试点击的示例网址:http://localhost:51459/orders?Query=iphone&MinimumPrice=22

public class OrderQuery
{
    public string Query { get; set; }
    public decimal? MinimumPrice { get; set; }
    public decimal? MaximumPrice { get; set; }
}

[Route("orders")]
public class OrdersController : ControllerBase
{
    [HttpGet("")]
    public async Task<ActionResult> GetOrdersAsync(OrderQuery query)
    {
        // query.Query is null.
        // all the properties of query are null.
    }
}

现在我可以单步执行该方法(即命中断点),因此该路由确实得到了“找到”和“处理”。

其次,我还尝试在 POCO 中的属性上添加 [FromQuery] 属性。

最后,我尝试更改请求中的大小写,但我认为模型投标不区分大小写。

谁能看到我做错了什么?是否有特定的middleware 我应该检查我是否已连接/未连接?

【问题讨论】:

  • 试试Task&lt;ActionResult&gt; GetOrdersAsync([FromQuery]OrderQuery query)
  • 不 - 也没有工作:(

标签: c# asp.net asp.net-core-2.0 asp.net-core-mvc-2.0


【解决方案1】:

天啊@我:(

所以方法签名中的变量名是query,(字符串)查询字符串键也是query

模型绑定与 which query 是什么意思混淆了? OrderQuery 类的属性?或者尝试将字符串设置为实际的方法变量,这是无法做到的。

解决方法:将整个签名重命名为:public async Task&lt;ActionResult&gt; GetOrdersAsync(OrderQuery orderQuery)

** 注意方法签名变量名变化**

哇! :)

TL;DR;不要将 POCO 变量名称命名为表单/查询字符串/路由键。

【讨论】:

    猜你喜欢
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多