路由找不到与区域同名的控制器

时间:2016-04-25 11:26:06

标签: c# asp.net asp.net-mvc-5

我跟着ASP:NET MVC 4中有关区域的文章(如何避免名称冲突)。我使用的是MVC 5,但我认为版本4中的所有功能都可用,并且应该可以在版本5中使用。

我的目录结构:

enter image description here

文件EpicAreaRegistration.cs内容:

namespace App1.Web.UI.Areas.Epic
{
  public class EpicAreaRegistration : AreaRegistration
  {
    public override string AreaName
    {
      get{ return "Epic"; }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
      context.MapRouteLocalized(
         name: "Epic_default",
         url: "Epic/{controller}/{action}/{id}",
         defaults: new { controller = "Pm", action = "Index", id = UrlParameter.Optional },
         namespaces: new[] { "App1.Web.UI.Areas.Epic.Controllers" }
      );
    }
 }

}

我的项目的App_Start - > RouteConfig.cs文件内容:更新更正后的命名空间

  public class RouteConfig
  {
    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional },
          namespaces: new[] { "App1.Web.UI.Controllers" } // according to article namespace must be added here, so ASP.NET router distinguishes between request: e
      );
    }
  }

最后我在项目目录Controllers中有EpicController.cs文件:

namespace App1.Web.UI.Controllers
{
  public class EpicController : Controller
  {
    public ActionResult Browse()
    {
      return View();
    }
  }

}

当我导航到:http://localhost:7300/Epic/Pm时,它可以正常工作(找到它),但http://localhost:7300/Epic/Browse无法正常工作(404 - 未找到)。我错过了什么?

我的假设是请求通过某种路由表。如果它没有在区域中找到Epic / Browse,它应该移动到项目的根Controller文件夹。它与视图(文件夹,如果不在共享中的文件夹外观,文件夹)相同的类比......

此外,我在Application_Start

中注册了所有区域
public class Global : HttpApplication
{
  void Application_Start(object sender, EventArgs e)
  {
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    ....

3 个答案:

答案 0 :(得分:1)

确保您的Area控制器使用正确的命名空间。

EpicController的命名空间目前是:

namespace App1.Web.UI.Controllers

将其更改为:

namespace App1.Web.UI.Areas.Epic.Controllers

答案 1 :(得分:0)

你的控制器也是史诗。所以你的网址看起来像

http://localhost:7300/Epic/Epic/Browse

答案 2 :(得分:0)

这可以帮助您访问,

http://localhost:7300/Areas/Epic/Epic/Browse

因为它包含在子文件夹中。