![](/img/trans.png)
[英]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.