我在我的 ASP.NET MVC2 项目中设置了一个默认路由,并且想为我的其他一些 Controller 添加/修改它。假设我有一个 Customer Controller ,其中的 Details 操作需要“id”参数(int)。例如:
//
// GET: /Customer/Details/5
public ActionResult Details(int id)
{
//...
}
如果用户输入“非数字”,如何添加将返回 404 的路由?
我尝试添加以下“之前”默认路由,但没有用...
routes.MapRoute(
"DefaultDigitsId", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index" },
new { id = @"\d+" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
请注意,如果可能,我想保留默认路由...
我的所有 Controller 都使用“详细信息”和“编辑”,其中需要“id”(int)参数。
我想知道是否有一种方法可以在不必指定多条路线(即通用的东西)的情况下实现这一点……当然,目标是如果用户输入诸如“/Customer/Details/apple”之类的内容,它不会抛出一个错误,但将它们带到错误页面...
还有 this post 提示设置默认值,但我不知道该怎么做......
最佳答案
我没有试过这个,但你可能想试一试:
routes.MapRoute(
"DefaultDetails",
"{controller}/Details/{id}",
new { controller = "Home", action = "Details" },
new { id = @"\d+" }
);
routes.MapRoute(
"DefaultEdit",
"{controller}/Edit/{id}",
new { controller = "Home", action = "Edit" },
new { id = @"\d+" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我希望“Customer/Details/1”使用第一个路由(将 id 验证为数字,调用“Customer/Edit/1”使用第二个路由,同样如此,调用“Customer/Buy/Orange"使用第三条路线,该路线不会尝试以这种方式验证 ID。我是否理解您要正确执行的操作?请告诉我这种方法是否有效。
关于asp.net-mvc - ASP.NET MVC2 路由约束 - 可选的数字 ID 参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4404040/