ASP.NET MVC默认URL视图

14
我正在尝试将我的MVC应用程序的默认URL设置为应用程序中一个区域内的视图。该区域名为"Common",控制器名为"Home",视图名为"Index"。
我已经尝试在web.config的forms部分中将defaultUrl设置为"~/Common/Home/Index",但没有成功。
我也尝试在global.asax中映射一个新路由:
routes.MapRoute(
        "Area",
        "{area}/{controller}/{action}/{id}",
        new { area = "Common", controller = "Home", action = "Index", id = "" }
    );

再次尝试,但仍然无效。


1
经进一步调查,发现请求已被正确地定向到控制器(即 MyApp.Areas.Common.Controllers.HomeController),无论是否进行了您建议的更改。但是,在这两种情况下,ViewEngine仅搜索/Views/Home和/Views/Shared文件夹,而不是从/Areas/Common/Views/Home和/Areas/Common/Views/Shared开始。奇怪的是,如果我创建一个带有ActionLink到相同控制器方法(即Index())的页面,则可以正常工作。嗯。 - Oundless
可能会有帮助。我曾经遇到过类似的问题。 - LiamB
4个回答

14

你列出的路由只有在他们显式地输入URL时才有效:

yoursite.com/{area}/{controller}/{action}/{id}

这条路由规则的含义是:

如果接收到的请求中包含一个有效的{area}、在该区域中有一个有效的{controller}、以及该控制器中有一个有效的{action},那么就将该请求路由到这里。

而你想要的是,如果用户只访问了你的网站yoursite.com,就默认将其路由到该控制器上:

routes.MapRoute(
    "Area",
    "",
    new { area = "Common", controller = "Home", action = "Index" }
);

这段代码的意思是,如果他们没有在http://yoursite.com后面加任何内容,则将其路由到以下操作:Common/Home/Index

此外,请将其放在你的路由表的顶部。

还要确保你让MVC知道注册应用程序中的区域:

请在Global.asax.cs文件的Application_Start方法中添加以下内容:

AreaRegistration.RegisterAllAreas();

1
对我来说,这是在根文件中搜索,而不是在区域内搜索。 - FrenkyB

7
你需要做的是:
  • Remove Default Route from global.asax.cs

    //// default route map will be create under area
    //routes.MapRoute(
    //    name: "Default",
    //    url: "{controller}/{action}/{id}",
    //    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    //);
    
  • Update SecurityAreaRegistration.cs in area Common

  • Add following route mapping:

     context.MapRoute(
        "Default",
        "",
        new { controller = "Home", action = "Index", id = "" }
    );
    

0
在 Global.asax 文件中,删除 .MapRoute 代码块,并将其修改为以下形式:
public static void RegisterRoutes(RouteCollection routes)
{
   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
}

然后在区域下面的yourareaAreaRegistration.cs文件中(如果您是通过VS添加该区域,则会出现该文件)

public override void RegisterArea(AreaRegistrationContext context)
{
     //This is the key one         
     context.MapRoute("Root", "", new { controller = "Home", action = "Login" });

     //Add more MapRoutes if needed
}

0

你所做的似乎是正确的。如果我猜的话,我会说这是由于你运行网站的方式导致的。在Visual Studio中,如果你在按F5时选择了特定的视图,那么该视图将成为起始URL - 尝试选择项目,然后按F5?


很抱歉,那不是问题的原因。不过还是感谢您的建议。 - Oundless

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接