我在玩Web API和MVC路由。我注意到一些我認爲很奇怪的事情。當您使用路由屬性時,框架的寬容度會降低。您會注意到,第一部分中的Get方法在id爲路徑並且它必須是查詢字符串的一部分時失敗。然而,在第二部分中,它會將這個ID作爲任意一個。我會認爲第一部分的代碼會像第二部分的代碼一樣。這是我的理解,MVC框架將嘗試和路由流量,如果需要,從查詢字符串中提取值,這是第二部分代碼的功能。顯然,當你使用路由屬性時,它不會這麼做。有人可以解釋嗎?Web API路由和查詢字符串
---------------------第一部分(代碼與路由屬性)
WebApiConfig.cs
config.Routes.MapHttpRoute("DefualtRouting",
"api/{controller}/{id}",
new { id = RouteParameter.Optional });
TestController.cs
[Route("api/test/")] //(notice routing attribute)
public IHttpActionResult Get(string id)
{
return Ok();
}
這裏是我所得到的,當我針對這些網址」小號
- 本地主機:43321/API /測試/ 1 - 這會返回一個404
- 本地主機:43321/API /測試ID = 1 - 這個工程
----- ----------------第二部分(代碼而不路由屬性) WebApiConfig.cs
config.Routes.MapHttpRoute("DefualtRouting",
"api/{controller}/{id}",
new { id = RouteParameter.Optional });
TestController.cs
public IHttpActionResult Get(string id)
{
return Ok();
}
這裏是我所得到的,當我針對這些網址的
- 本地主機:43321/API /測試/ 1 - 這個工程
- 本地主機:43321/API /測試?id = 1 - This works
的Web API和MVC是相當新的給我。我正在瀏覽一個使用路由屬性和配置路由的複合教程,他爲什麼這麼做,我不知道。我試圖在這裏回答的一個問題是,爲什麼帶有route屬性的控制器在沒有route屬性的控制器時沒有從查詢字符串中選擇ID。 –
因爲沒有路由屬性的人將Id定義爲可選。我的例子展示瞭如何用屬性來做到這一點。 –