2012-05-18 38 views
4

如何在asp.net mvc重定向到錯誤頁面時停止json post?當發生異常時,它會不斷嘗試重定向到我的配置文件中的錯誤路徑,並且我需要它來返回異常......它甚至不嘗試將它們指向正確的路徑 - 它一直在尋找一個錯誤。當他們都在一個錯誤文件夾/控制器設置,這是我的配置文件中清楚地列出的主頁(視圖的主頁文件夾,就好像它試圖使用我的家庭controleler)cshtml視圖:如何在json post發生異常時將asp.net mvc重定向到錯誤控制器

<customErrors mode="On" defaultRedirect="~/Error/Error"> 
    <error statusCode="404" redirect="~/Error/NotFound" /> 
    <error statusCode="403" redirect="~/Error/Forbidden" /> 
</customErrors> 

謝謝!

+0

在控制器方法中捕捉異常?如果你自己處理異常,它不應該傳播到錯誤控制器。 –

+0

好的,但是,爲什麼它會嘗試重定向到我的主文件夾下的錯誤視圖 - 它應該在錯誤視圖文件夾中查找它?謝謝! – user1368182

+0

你想要哪一個...根本沒有錯誤重定向,或者讓它重定向到正確的位置?爲了讓事情更清楚,我會將「重定向到錯誤的地方」作爲一個單獨的問題發佈,並添加一些細節。 –

回答

0

解決方案1控制器: 您可以爲所有的控制器基本控制器(這是好主意,有它),在這個控制器,你可以重寫onException的方法是這樣的:

protected override void OnException(ExceptionContext filterContext) 
    { 
     if (Request.IsAjaxRequest()) 
     { 
      // TODO 
     } 
     else 
     { 
      base.OnException(filterContext); 
     } 
    } 

解決方案2: 您可以創建自定義操作過濾器做上面的工作和使用方法。你可以在global.asax中註冊這個過濾器,或者只裝飾你需要的那些控制器/操作。

總體思路是使用:

Request.IsAjaxRequest() 

希望它能幫助。祝你好運,玩得開心:)

1

,你可以通過在Global.asax中註冊Application_Error事件做,然後將其重定向到這樣的數據錯誤控制器或者你可以執行要根據錯誤代碼

protected void Application_Error() 
     { 
      var exception = Server.GetLastError(); 
      var httpException = exception as HttpException; 
      Response.Clear(); 
      Server.ClearError(); 
      var routeData = new RouteData(); 
      routeData.Values["controller"] = "Error"; 
      routeData.Values["action"] = "oops"; 
      routeData.Values["exception"] = exception; 
      Response.StatusCode = 500; 
      if (httpException != null) 
      { 
       Response.StatusCode = httpException.GetHttpCode(); 
       switch (Response.StatusCode) 
       { 
        case 403: 
         routeData.Values["action"] = "NoAccess"; 
         break; 
        case 404: 
         routeData.Values["action"] = "NotFound"; 
         break; 
       } 
      } 

      IController errorsController = new ErrorController(); 
      var rc = new RequestContext(new HttpContextWrapper(Context), routeData); 
      errorsController.Execute(rc); 
     } 

然後什麼都起作用讓用行動哎呀/ NotAccess/NOTFOUND像

public ActionResult oops(Exception exception) 
     { 
      //return Content("General failure", "text/plain"); 

      // return View(); 

     } 

     public ActionResult NotFound() 
     { 
      // return Content("Not found", "text/plain"); 
      // return View("oops"); 
     } 

     public ActionResult NoAccess() 
     { 
      //return Content("Forbidden", "text/plain"); 
      //return View("oops"); 
     } 

以及適當的信息返回自己的看法

相關問題