2013-10-17 19 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); 
    }