我剛開始使用ASP.NET Web API 2.1並遇到了限制。使用屬性的路由,我能做到以下幾點:查詢參數路由約束
[Route("item/{id:int}")]
public IHttpActionResult GetItem(int id)
{
...
}
的URL /item/5
將被路由到這個動作,但URL /item/abc
不會,因爲在{id:int}
的int
約束。
儘管在文檔中沒有提到或演示查詢參數,但我試圖更改我的URL,以便id
參數與查詢字符串一起位於查詢字符串中。
[Route("item?{id:int}")]
public IHttpActionResult GetItem(int id)
{
...
}
如果我現在嘗試跑,我得在Application_Start
的Configure
方法調用錯誤。
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
消息如下。
ArgumentException的是由用戶代碼未處理
路由模板不能以「/」或「〜」字符開頭,且不能包含一個「?」字符。
有兩件事情打擾了我這件事。
首先,MSDN上的the section documenting Route Prefixes表明將~
字符放在路由模板的開頭是完全可以接受的。我嘗試過了,它按照記錄工作。
其次,如果不是這樣,我怎樣才能在查詢參數上放置一個路由約束?考慮以下內容,並刪除了路由約束。
[Route("item")]
public IHttpActionResult GetItem(int id)
{
...
}
的URL /item/5
將被路由到這個行動,id
設置爲5
- 但這樣會將該網址/item/abc
,與id
設置爲0
。
有沒有辦法在查詢參數上放置路由約束?
我還沒試過,但正則表達式。我使用這篇文章:http://feedproxy.google.com/~r/TypeCastException/~3/0OVZG5c2bY0/#Regular-Expressions-in-Route-Constraints,它看起來像它允許約束。 – celerno
@celerno謝謝,但這是爲MVC,而不是Web API。 –