需要ASP.NET MVC Route Id参数

nii*_*ico 3 c# asp.net-mvc asp.net-routing asp.net-mvc-routing

我有这条路线:

routes.MapRoute(
            "PlaceDetails",
            "{controller}/{action}/{id}",
            new { controller = "Place", action = "Details", id = UrlParameter.Optional }
        );
Run Code Online (Sandbox Code Playgroud)

这路由很好:mysite.com/place/details/123

使Id 123可用于场所控制器的详细操作 - 然后可以查找位置'123'.

但是 - 此URL也会传递给控制器​​:mysite.com/place/details/

我希望它返回HttpNotFound- 但它向控制器发送一个空的Id - 并要求我处理它.

如果路由本身实现了这一点,而不是在控制器本身中需要不合理的空检查,那似乎更整洁.

我在谷歌没有发现这个具体问题.

我怎样才能做到这一点?

Nig*_*888 8

要创建id所需的值,您不能将其设置为UrlParameter.Optional或提供任何其他默认值.如果URL段中没有值,并且没有默认值,则路由将与请求不匹配.

routes.MapRoute(
    "PlaceDetails",
    "{controller}/{action}/{id}",
    new { controller = "Place", action = "Details" }
);
Run Code Online (Sandbox Code Playgroud)

但是你可能还需要以另一种方式限制路由,以防止它在不应该匹配的情况下进行匹配.

routes.MapRoute(
    "PlaceDetails",
    "Place/{action}/{id}",
    new { controller = "Place", action = "Details" }
);
Run Code Online (Sandbox Code Playgroud)

请参阅为什么在asp.net mvc中的常用路由之前首先映射特殊路由?有关详细信息和其他选项.