2013-10-17 49 views
1

我有一種情況,我需要以部分視圖的形式向客戶端返回異常。這裏是我的代碼一起返回部分視圖和錯誤響應

  catch(PasswordException ex) 
      { 
       Response.StatusCode = 500; 
       ViewBag.Message = ex.Message; 
       return PartialView("Exception"); 
      } 

我設置響應的StatusCode 500這樣的反應是夾在AJAX調用的錯誤部分。

這工作正常,但它似乎有點矯枉過正返回服務器錯誤只是爲了標誌此異常。

有沒有更好的/標準的方式來做到這一點?

+0

從技術上講,它不是一個服務器錯誤......用戶輸入了錯誤的密碼,所以你應該返回錯誤代碼應該是401(未授權)。注意這也會被客戶端的Javascript抓住。 – saluce

回答

0

你可以在你的web.config聲明的錯誤:

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

然後你在ErrorController進行管理:

public class ErrorController : Controller 
{ 
    public ViewResult Index() 
    { 
     return PartialView("Error"); 
    } 
    public ViewResult ServerError() 
    { 
     Response.StatusCode = 500; 
     return PartialView("ServerError"); 
    } 

    public ViewResult NotFound() 
    { 
     Response.StatusCode = 404; 
     return PartialView("NotFound"); 
    } 
} 
1

試試這個,創建自定義錯誤和枚舉如下用途:

/// <summary> 
/// Redirect to custom error page. 
/// </summary> 
/// <returns>View for custom error page.</returns> 
public ActionResult Error(CustomError customErrorType,string message) 
{ 
switch (customErrorType) 
    { 
     case CustomError.A: 
      @ViewBag.ErrorMessage = message; 
      @ViewBag.Title= CustomError.A; 
      break; 
     case CustomError.B: 
      @ViewBag.ErrorMessage = message; 
      @ViewBag.Title= CustomError.B; 
      break;   
    } 
    return View("_CustomError"); 
} 

查看

@{ 
    @ViewBag.Title 
    } 

    @ViewBag.ErrorMessage 

重定向如下:

catch(PasswordException ex) 
    { 
     Response.StatusCode = 500; 
     return RedirectToAction(Response.StatusCode,ex.Message); 
    }