ASP.NET Core 2 MVC App“POCO”模型绑定不绑定

时间:2017-10-17 12:10:58

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

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

我正在尝试在Postman中执行一个非常简单的GET请求,而我的Controller Action没有将查询字符串参数绑定到我的自定义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我应该检查一下我是否已连接/未接线?

1 个答案:

答案 0 :(得分:1)

OMG @ me :(

因此方法签名中的变量名称为query,而(字符串)查询字符串键也为query

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

解决方案:将整个签名重命名为:public async Task<ActionResult> GetOrdersAsync(OrderQuery orderQuery)

**注意方法签名变量名称更改**

卫生署! :)

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