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

Asp.net mvc 如何在RegisterArea中编码MapRoute以将默认区域路由到另一个区域(网站根目录),asp.net-mvc,routes,asp.net-mvc-areas,Asp.net Mvc,Routes,Asp.net Mvc Areas,如果用户直接访问区域根url(\Products),我希望将其路由到网站主页(\home)。RegisterArea route.map中的正确编码是什么 下面是项目中的文件夹结构以及它们如何映射到网站 /区域/产品->/产品 /查看/主页->/Home 如果用户转到/,则转到/Home(使用控制器Home的索引操作) 如果用户转到/Products,则转到/Home(使用控制器主页的索引操作) 如果用户转到/Products/Fruit,则使用控制器Fruit的索引操作/产品/水果 我有一个标

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

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

/区域/产品->/产品

/查看/主页->/Home

如果用户转到/,则转到/Home(使用控制器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,我会收到错误消息

找不到资源

描述:HTTP404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下URL并确保其拼写正确

请求的URL:/产品/

两种可能的解决方案,一些黑客可能会考虑的是:

  • 在区域中创建一个控制器,将默认值分配给该控制器,并将索引操作重定向回主控制器

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

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

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

    产品区域注册

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