我有这条路线:
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
- 但它会向控制器发送一个 null 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" }
);
See 为什么在 asp.net mvc 中先映射特殊路由,然后再映射普通路由? https://stackoverflow.com/a/35674633/181087了解详细信息和其他选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)