[英]Asp.net MVC4 mandatory route parameter
我有一個這樣的RouteConfig
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index"}
);
}
}
但是當我嘗試使用“ http://example.com/controllername/action/166699406 ”時。 它得到下面的錯誤。 我想要實現的是,我想使id參數成為必需參數。 如果他們在網址中沒有id參數,則不應點擊路由並顯示404。我知道我們可以通過在控制器中對參數進行空檢查來實現此目的。 有什么辦法可以在路由配置本身中進行管理。
路由表中沒有路由與提供的值匹配。
異常詳細信息:System.InvalidOperationException:路由表中沒有路由與提供的值匹配。
您應該在web.confing中而不是在路由中進行處理。
<customErrors mode="On" defaultRedirect="/error/default">
<error statusCode="403" redirect="/error/restricted"/>
<error statusCode="404" redirect="/Default/DefaultRoute"/>
<error statusCode="500" redirect="/error/problem"/>
</customErrors>
如果我理解正確,您想對路線添加約束
constraints: new { id = @"([0-9]+)" }
這意味着僅當id為數字時,該路由才會匹配,這是強制性的。
在全:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index"},
constraints: new { id = @"([0-9]+)" }
);
請注意,您在問題中給出的路線應與您當前使用的規則相匹配,因此我會仔細檢查您的控制器,動作和拼寫,以防萬一某個地方有錯字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.