2017-08-29 28 views
0

我已經搜索了上下,仍然得到這個錯誤。我不能,因爲我的生活理解爲什麼。MVC RedirectToAction前往錯誤路徑

{「視圖‘錯誤’或它的主人沒有被發現或沒有視圖發動機 支持搜索位置以下位置進行搜索 :\ r \ N〜/查看/管理員/ Error.aspx \ r \ N〜/查看/管理員/ Error.ascx \ r \ N〜/查看/共享/ Error.aspx \ r \ N〜/查看/共享/ Error.ascx \ r \ N〜/查看/管理員/錯誤。 CSHTML \ r \ N〜/查看/管理員/ Error.vbhtml \ r \ N〜/查看/共享/ Error.cshtml \ r \ N〜/查看/共享/ 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"} 
      ); 

    } 

缺少什麼我在這裏?

謝謝。

編輯

我刪除了自定義授權屬性,我仍然得到此異常拋出。令我困惑的是它從未擊中Catch塊。

EDIT 2

我回去,並在應用開始做了一個斷點。

以上編輯是實際拋出異常的地方。

+0

您是否將此錯誤重定向到錯誤頁面,還是出現在其他重定向中? –

+0

@LuizPaulo正如我所說,它似乎只是在授權失敗後才做到。 –

+0

我認爲它試圖找到失敗授權的默認錯誤頁面,這很奇怪 –

回答

1

您的路由配置完全錯誤。可選的細分行爲就像變量 - 任何值都可以工作。請參閱Why map special routes first before common routes in asp.net mvc?

問題在發生,因爲您的Administrator路由正在捕獲每個包含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"} 
     ); 
+0

我確實自己弄清楚了這一點,但這正是問題所在。標記爲已接受。 :) 謝謝。 –