2017-10-17 262 views
1

我有一个非常基本的ASP.NET Core 2 Web应用程序(没有剃须刀视图,只是带有json响应的MvcCore)。ASP.NET Core 2 MVC App“POCO”Model binding not binding

我想在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我应该检查一下,看看我是否连线/没有连线?

+2

尝试'任务 GetOrdersAsync([FromQuery] OrderQuery查询)' – Nkosi

+0

不 - 也没有工作:( –

回答

1

OMG @我:(

所以在方法签名变量名是query和(串)查询字符串键也是query

query

模型结合是越来越有混淆我的意思是OrderQuery类的财产或试图设置字符串方法实际变量,它不能做

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

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

Doh! :)

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