2017-10-17 315 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變量名稱命名爲表單/查詢字符串/路由鍵。