在ASP.NET MVC区域路由中找不到404错误

我遇到了MVC 5中的Area路由问题。当我浏览到/ Evernote / EvernoteAuth时,我得到一个404资源无法找到的错误。

我的区域看起来像这样:

Areas
    Evernote
        Controllers
            EvernoteAuthController
        Views
            EvernoteAuth
                Index.cshtml

EvernoteAreaRegistration.cs(UPDATE:RegisterArea()没有被调用,所以我做了一个Clean和Rebuild,现在它被调用,但结果相同。)包含此路由映射:

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

EvernoteAuthController的Index()方法只是返回View()。

我的应用程序的RouteConfig.cs目前没有定义路线图,但我尝试通过实现这个手动“强制”它:

routes.MapRoute(
    name: "EvernoteAuthorization",
    url: "Evernote/{controller}/{action}",
    defaults: new { controller = "EvernoteAuth", action = "Index", id = UrlParameter.Optional },
    namespaces: new string[] { "AysncOAuth.Evernote.Simple.SampleMVC.Controllers" }
);

但是,无论此路线图是存在还是被注释掉,我都会得到相同的结果。

使用Phil Haack的asp.net mvc路由调试器,我看到我的路由匹配正常,并且区域名称,控制器名称和Action方法名称匹配。 我在控制器操作方法中放置了断点,并且从未输入这些方法。 更新:当浏览到/ Evernote / EvernoteAuth时,从未输入这些方法,但是当我浏览区域名称/ Evernote时,EvernoteAuthController被实例化并调用了Index()方法。 (为什么这个控制器被/ Evernote不是由/ Evernote / EvernoteAuth实例化?)然后我收到错误:

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/EvernoteAuth/Index.aspx
~/Views/EvernoteAuth/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/EvernoteAuth/Index.cshtml
~/Views/Shared/Index.cshtml
and so on...

在这种情况下,我相信〜= /(应用程序根目录)。 因此Area AreasEvernoteViews区域未被搜索。

我如何解决这个问题?


将正确的名称空间添加到控制器非常重要

  namespace YourDefaultNamespace.Areas.Evernote.Controllers
  {
    public class EvernoteAuthController : Controller
    { 
        ...
        ...
    }
  }

所以路由可以找到你的控制器。 现在,您必须使用该方法在Global.asax.cs中注册该区域

AreaRegistration.RegisterAllAreas();

就像你在我的岗位在http://piranhacms.org/the-magic-of-mvc-routing-with-multiple-areas发现你可能猜到了所有的控制器被映射到默认路由(即手动添加的一个在你的路由配置中)。 如果它已被添加到默认路由,那么它将搜索其视图的默认路由的位置,即~/Views/...

所以这个错误似乎是区域配置不正确。 确保在Global.asax.xs中有以下行:

AreaRegistration.RegisterAllAreas();

这是实际设置区域的线,并确保当区域内的控制器被击中时,该区域的视图目录被搜索,在你的情况下~/Areas/Evernote/Views 。 我的博客文章中涉及的内容是如何消除Evernote区域中的控制器正在映射到默认路由中。

希望这个帮助!

问候

哈坎


请注意AreaRegistration.RegisterAllAreas();Application_Start方法中。

如果您将AreaRegistration.RegisterAllAreas()放在Application_Start中最后一个不起作用。

AreaRegistration.RegisterAllAreas()放在第一位,路由将成功执行。

例:

 protected void Application_Start(object sender, EventArgs e)
 {
        AreaRegistration.RegisterAllAreas();  //<--- Here work

        FilterConfig.Configure(GlobalFilters.Filters);
        RouteConfig.Configure(RouteTable.Routes);

        AreaRegistration.RegisterAllAreas();  //<--- Here not work
 }
链接地址: http://www.djcxy.com/p/36761.html

上一篇: Getting error 404 not found with ASP.NET MVC Area routing

下一篇: ASP.NET MVC Routing System