我有这条路线:
routes.MapRoute(
"PlaceDetails",
"{controller}/{action}/{id}",
new { controller = "Place", action = "Details", id = UrlParameter.Optional }
);
这样可以很好地进行路由:mysite.com/place/details/123
使Id 123可用于位置控制器的details操作-然后可以查找位置'123'。
但是,此URL也会传递给控制器:mysite.com/place/details/
我希望它返回HttpNotFound
-但它会向控制器发送一个空ID-并要求我进行处理。
如果路由本身实现了此目的,而不是在控制器本身中进行了看起来似乎不存在的空检查,则似乎更加整洁。
我在Google上没有发现有关此特定问题的任何信息。
我怎样才能做到这一点?
要获得id
所需的值,您不得将其设置为UrlParameter.Optional
或提供任何其他默认值。如果网址段中没有值,也没有默认值,则路由将与请求不匹配。
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中先映射特殊路由,然后再映射普通路由?有关详细信息和其他选项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句