在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