如何在RegisterArea中编写MapRoute代码以将区域默认路由到另一个区域(网站根目录)

时间:2014-10-02 12:32:31

标签: asp.net-mvc routes asp.net-mvc-areas

如果用户直接访问区域根URL(\ Products),我希望将用户路由到网站主页(\ Home)。 RegisterArea route.map中的正确编码是什么?

以下是项目中的文件夹结构以及它们如何映射到网站

/ Area / Products - > /产品

/查看/主页 - > /主页

如果用户转到/,则转到/ Home(使用控制器主页的索引操作)

如果用户访问/ Products,则转到/ Home(使用控制器主页的索引操作)

如果用户转到/ Products / Fruit,则使用控制器Fruit的索引操作; /产品/水果

我有一个标准 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", id = UrlParameter.Optional }
        );
    }

我在global.asax.cs文件中有一个标准条目

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }

这是我更新的区域注册路线

public override void RegisterArea(AreaRegistrationContext context) 
    {
        context.MapRoute(
            "Product_default",
            "Product/{controller}/{action}/{id}",
            new {
            area = "",
            controller = "Home", 
            action = "Index", 
            id = UrlParameter.Optional });
     }

如果我转到\ Products,我会收到错误消息

无法找到资源。

描述:HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。

请求的网址:/ products /

有些人可能在黑客中考虑的两个可能的解决方案是:

  1. 在区域中创建一个控制器,为该控制器分配默认值并将索引操作重定向回家庭控制器

  2. 在Global.asax.cs文件中注册301重定向/ products

1 个答案:

答案 0 :(得分:0)

ProductAreaRegistration配置为默认为控制器,该控制器将重定向到网站根目录上的Home控制器(area =“”)。

ProductAreaRegistration

    public class ProductAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Product";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Product_default",
                "Product/{controller}/{action}/{id}",
                defaults: new { controller="Redirect", action = "Index", id = UrlParameter.Optional });
        }
    }

控制器

public class RedirectController : Controller
    {
        // GET: Product/Redirect
        public ActionResult Index()
        {
            return RedirectToAction("Index","Home",new { area = "" });
        }
    }