[英]Make ASP.NET MVC treat a route parameter named ``id'' like any other parameter
[英]Make ASP.NET MVC Route Id parameter required
我有這條路線:
routes.MapRoute(
"PlaceDetails",
"{controller}/{action}/{id}",
new { controller = "Place", action = "Details", id = UrlParameter.Optional }
);
這路由很好:mysite.com/place/details/123
使Id 123可用於場所控制器的詳細操作 - 然后可以查找位置'123'。
但是 - 此URL也會傳遞給控制器:mysite.com/place/details/
我想要它返回HttpNotFound
- 但它向控制器發送一個空的Id - 並要求我處理它。
如果路由本身實現了這一點,而不是在控制器本身中需要不合理的空檢查,那似乎更整潔。
我在谷歌沒有發現這個具體問題。
我怎樣才能做到這一點?
要使id
值成為必需值,您不能將其設置為UrlParameter.Optional
或提供任何其他默認值。 如果URL段中沒有值,並且沒有默認值,則路由將與請求不匹配。
routes.MapRoute(
"PlaceDetails",
"{controller}/{action}/{id}",
new { controller = "Place", action = "Details" }
);
但是你可能還需要以另一種方式限制路由,以防止它在不應該匹配的情況下進行匹配。
routes.MapRoute(
"PlaceDetails",
"Place/{action}/{id}",
new { controller = "Place", action = "Details" }
);
請參閱為什么在asp.net mvc中的常用路由之前首先映射特殊路由? 有關詳細信息和其他選項。
刪除默認值中id
占位符的可選項
routes.MapRoute(
"PlaceDetails",
"{controller}/{action}/{id}",
new { controller = "Place", action = "Details"}
);
現在mysite.com/place/details/
與路線不匹配。 如果您沒有映射另一個默認路由。
如果上述原因與您的路由沖突,您可以像這樣修改它
routes.MapRoute(
"PlaceDetails",
"Place/Details/{id}",
new { controller = "Place", action = "Details"}
);
它將此映射直接耦合到PlaceController.Details
操作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.