ASP.NET MVC URL路由映射(URL重写)问题

时间:2011-09-06 10:38:53

标签: asp.net-mvc url-rewriting routes global-asax

这是我的.Net MVC文件夹结构:

screenshot

我有一个名为“Area”的单独文件夹,里面有一个名为“Restaurant”的文件夹。 在这个“餐厅”文件夹里面,我有一个名为“MenuController”的控制器,它的动作名为“Index”

我尝试使用以下代码重写“Global.asax.cs”中的(自定义路由映射)网址。

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

但它给了我一个HTTP 404错误。

1 个答案:

答案 0 :(得分:2)

路径中的控制器参数应该是控制器的名称,而不是路径:

如果您的控制器名称为Menu,请将其更改为以下方式:

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

另一个奇怪的事情是:这条路线是否位于Global.asax文件中?它应该在您的RestaurantAreaRegistration.cs文件中,如下所示;

public class RestaurantAreaRegistration : AreaRegistration {

    public override string AreaName {
        get {
            return "Restaurant";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context) {

        context.MapRoute(
              "RestaurantMenu", // Route name
              "Restaurant/{id}", // URL with parameters
              new { controller = "Menu", action = "Index", id = UrlParameter.Optional }
             // Parameter defaults
        );

        context.MapRoute(
            "Accommodation_default",
            "accomm/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );

    }
}
那么你可以试一试。如果您想将ActionLink与此路由一起使用,请使用它:

@Html.ActionLink("MyLink", "Index", "Menu", new { id = 1, Area = "Restaurant"})

我用记事本写了上面的代码,所以可能会有一些错别字:)