繁体   English   中英

需要ASP.NET MVC Route Id参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM