使 ASP.NET 需要 MVC 路由 ID 参数
Make ASP.NET MVC Route Id parameter required
我有这条路线:
routes.MapRoute(
"PlaceDetails",
"{controller}/{action}/{id}",
new { controller = "Place", action = "Details", id = UrlParameter.Optional }
);
这条路线很好:
我的网站.com/place/details/123
使 ID 123 可用于地点控制器的详细操作 - 然后可以查找地点“123”。
但是 - 这个 URL 也传递给了控制器:
我的网站.com/place/details/
我想 return HttpNotFound
- 但它向控制器发送了一个空 ID - 需要我来处理。
如果路由本身实现了这一点,而不是需要在控制器本身中进行不合时宜的空检查,这似乎会更整洁。
我在 Google 中没有找到关于此特定问题的任何内容。
我该怎么做?
删除默认值中 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
操作
要使 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" }
);
有关详细信息和其他选项,请参阅 。
我有这条路线:
routes.MapRoute(
"PlaceDetails",
"{controller}/{action}/{id}",
new { controller = "Place", action = "Details", id = UrlParameter.Optional }
);
这条路线很好: 我的网站.com/place/details/123
使 ID 123 可用于地点控制器的详细操作 - 然后可以查找地点“123”。
但是 - 这个 URL 也传递给了控制器: 我的网站.com/place/details/
我想 return HttpNotFound
- 但它向控制器发送了一个空 ID - 需要我来处理。
如果路由本身实现了这一点,而不是需要在控制器本身中进行不合时宜的空检查,这似乎会更整洁。
我在 Google 中没有找到关于此特定问题的任何内容。
我该怎么做?
删除默认值中 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
操作
要使 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" }
);
有关详细信息和其他选项,请参阅