簡體   English   中英

Asp.net MVC4強制路由參數

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM