我有一个非常基本的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
我应该检查一下我是否已连接/未接线?
答案 0 :(得分:1)
OMG @ me :(
因此方法签名中的变量名称为query
,而(字符串)查询字符串键也为query
。
模型绑定与混淆了 query
我的意思是什么? OrderQuery
类的属性?或者尝试将字符串设置为实际的方法变量,而不能这样做。
解决方案:将整个签名重命名为:public async Task<ActionResult> GetOrdersAsync(OrderQuery orderQuery)
**注意方法签名变量名称更改**
卫生署! :)
TL; DR;不要将POCO变量名称命名为表单/查询字符串/路由键。