我上下搜索了SO并仍然收到此错误。我不能,因为我的生活理解为什么。
{“找不到视图'错误'或其主人或没有查看引擎 支持搜索的位置。以下地点是 搜寻:\ r \ N〜/查看/管理员/ Error.aspx \ r \ N〜/查看/管理员/ Error.ascx \ r \ N〜/查看/共享/ Error.aspx \ r \ N〜/查看/共享/Error.ascx\r\n~/Views/Administrator/Error.cshtml\r\n~/Views/Administrator/Error.vbhtml\r\n~/Views/Shared/Error.cshtml\r\n~/Views /Shared/Error.vbhtml“}
这是一个自定义错误记录类:
internal static class _Logger
{
internal static void Log(Exception ex)
{
string logPath = HttpContext.Current.Server.MapPath(@"\Log\" + DateTime.Now.Month + "_" + DateTime.Now.Year + "_log");
File.AppendAllText(logPath,
"Time:" + DateTime.Now + "\n"
+ ex.Message +"\n" + ex.InnerException + "\n" + ex.StackTrace);
}
}
这是从这里抛出的:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected void Application_Error()
{
var ex = Server.GetLastError(); //RIGHT HERE CATCHES IT.
_Logger.Log(ex);
}
}
路线配置:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Administrator",
url: "{controller}/{action}",
defaults: new { controller = "Administrator", action = "Index" }
);
routes.MapRoute(
name: "Trials",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Trials", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Error",
url: "{controller}/{action}",
defaults: new { controller = "Error", action = "Index"}
);
}
我在这里缺少什么?
感谢。
修改
我删除了自定义Authorization属性,但我仍然在抛出此异常。令我困惑的是它永远不会碰到Catch区块。
编辑2
我回去并在应用开始时做了一个断点。
上面编辑的是实际抛出异常的地方。
答案 0 :(得分:1)
您的路由完全配置错误。可选段就像变量一样 - 任何值都可以。见Why map special routes first before common routes in asp.net mvc?
问题正在发生,因为您的Administrator
路由正在捕获URL中包含1或2个段的每个请求,这会阻止您的其他路由被点击。
有很多方法可以解决这个问题,但最简单的方法是在URL中至少创建一个段而不是使用所有变量。
routes.MapRoute(
name: "Administrator",
url: "Administrator/{action}",
defaults: new { controller = "Administrator", action = "Index" }
);
routes.MapRoute(
name: "Trials",
url: "Trials/{action}/{id}",
defaults: new { controller = "Trials", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Error",
url: "Error/{action}",
defaults: new { controller = "Error", action = "Index"}
);