我在我的 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/

10-17 02:00