Asp.net mvc 3 MVC中的默认数字根路由

Asp.net mvc 3 MVC中的默认数字根路由,asp.net-mvc-3,url-routing,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" }

我有一个网站,我想

/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方案,因为它是公开的和正在使用的


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

我已经测试了此路由:

        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+" }
        );
        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
        );
您将得到一个未找到的404资源。但是如果你像这样切换它们:

        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+" }
        );
        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

的请求获得所需的路由。如果我只启用一个路由,那么我将获得目录列表。相反,我应该被重定向到/user/22并得到404错误。@AkashKava重定向并得到404?我不理解你的评论。它现在可以工作了,它需要高于所有路由,而且我把IIS express设置搞砸了,它创建了一个虚拟目录,它与web.config冲突