MVC中的默认数字根路由

时间:2012-02-13 13:56:32

标签: asp.net-mvc-3 url-routing

我有一个网站,我想要

/22         Redirect to 
/user/22

等等,但是还有其他mvc视图和控制器,它们都可以正常工作,我使用了以下路由,但它不起作用。

routes.MapRoute(
    "Final",
    "{id}",
    new { controller = "Root", action = "Index"},
    new { id = @"\d+" },
    new string[] { "MyWebApp.Controllers" }
);

理想情况下,只有当url片段为数字时,此路由才有效。

我在MyWebApp.Controllers命名空间中也有一个RootController。它所做的就是重定向到下面的其他页面,

public class RootController : Controller
{
    public ActionResult Index(long id) {
        return RedirectPermanent("/user/" + id);
    }
}

现在,我们必须这样做,因为它是对旧网站的升级,我们无法更改网址方案,因为它是公开的并且正在使用中。

注意:URL / user / 22等正常工作,只有这个根URL出现问题。

1 个答案:

答案 0 :(得分:2)

我已经测试了这条路线:

        routes.MapRoute(
            "Final",
            "{id}",
            new { controller = "Root", action = "Index" },
            new { id = @"\d+" }
        );

它正如它应该的那样工作。但是,如果您遇到问题,我猜您所需的URL与之前的其他路由匹配。把这条路线作为你的第一条路线,看看是否能修好它。

例如,如果您的路线如下所示:

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
            "Final",
            "{id}",
            new { controller = "Root", action = "Index" },
            new { id = @"\d+" }
        );

您将获得 404资源未找到。但如果你这样切换它们:

        routes.MapRoute(
            "Final",
            "{id}",
            new { controller = "Root", 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
        );

然后,您将通过/1234等请求获得所需的路由。