MVC RedirectToAction标题为错误的路径

时间:2017-08-29 12:55:49

标签: c# model-view-controller asp.net-mvc-routing

我上下搜索了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

我回去并在应用开始时做了一个断点。

上面编辑的是实际抛出异常的地方。

1 个答案:

答案 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"}
        );