2

我有一個API動作:屬性路由識別可選的查詢字符串參數

[HttpGet, Route("{id}/overview/")] 
public async Task<HttpResponseMessage> Overview(string id, DateTime from, DateTime? to) 
{ 
... 
} 

正如你注意到,to是可選參數,但是當我提出要求:

「/ API /霜/ 3d7dd454c00b/overview?from = 2016-09-04T18:00:00.000Z

我得到了404錯誤。如果我刪除參數to public async Task<HttpResponseMessage> Overview(string id, DateTime from)

然後一切正常。如何強制它與to參數一起使用?

+1

在你的例子中'to'不是可選的。您需要將其更改爲[可選參數](https://msdn.microsoft.com/en-us/library/dd264739.aspx#Anchor_2)。即'概述(字符串id,從DateTime?到= null的DateTime)'。就這些。 – Nkosi

回答

4

使用FromUri屬性做出可選



    [HttpGet, Route("{id}/overview/")] 
    public async Task Overview(string id, [FromUri]DateTime from, [FromUri]DateTime? to = null) 
    { 
    ... 
    } 

要在此id參數被拾起,因爲你已經在你的路由中指定其擴展,該框架已經出現了匹配的路由,並試着撥打方法匹配,即使路由缺少剩餘的參數,它試圖從查詢字符串中提取它們。

然後你得到你的404,因爲沒有方法匹配你的調用,這是由於DateTime是可爲空的,但不是可選的。

希望這會有幫助

+0

是的,'to = null'解決了這個問題,謝謝你的回答。 – user348173

相關問題