设置.NET MVC HTTP阿贾克斯错误代码调用
问题描述:
我试图建立我的控制器,这样他们可以使用HTTP错误代码来响应发送到AJAX调用。因此,例如,我有我的登录Ajax调用控制器动作:设置.NET MVC HTTP阿贾克斯错误代码调用
[System.Web.Mvc.HttpPost, System.Web.Mvc.AllowAnonymous]
public ActionResult Login(string userName, string password, bool rememberMe, string returnUrl)
{
[...]
var loginError = new HttpResponseMessage(HttpStatusCode.Unauthorized)
{
Content = new StringContent("Lorem ipsum 2 " + ErrorMessages.LOGINERROR),
ReasonPhrase = "Lorem ipsum 2 " + ErrorMessages.LOGINERROR
};
throw new HttpResponseException(loginError);
}
$.ajax({
type: "POST",
url: url,
data: data,
dataType: "text",
success: callBack,
error: function() { console.log("Error..."); },
statusCode : {
401: function (result) {
console.log("Login failed (401): " + result);
}
}
});
我想有几件事情我没有做对的,如果有人能指出来,这将是可爱的!
谢谢!
答
而是抛出异常的只是返回的ActionResult提供一些内容,并设置响应代码。对于你的情况,你可以创建一个我称之为ExtendedJsonResult东西:
public class ExtendedJsonResult : JsonResult
{
public ExtendedJsonResult(object data)
{
base.Data = data;
}
public int StatusCode { get; set; }
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.StatusCode = this.StatusCode;
base.ExecuteResult(context);
}
}
,然后在控制器
return new ExtendedJsonResult("Some error")
{
StatusCode = 401,
};
您也可以只返回现有HttpStatusCodeResult
。
答
看看这个解决方案:ASP.NET MVC Ajax Error handling
达林季米特洛夫写用行动过滤器非常好的解决方案:
public class MyErrorHandlerAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
filterContext.Result = new JsonResult
{
Data = new { success = false, error = filterContext.Exception.ToString() },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
然后,你可以写你的客户端错误处理的所有状态码和使用它的AJAX要求。
感谢这帮了我很多。但是,代码中存在一些问题,我对其进行了修正。 – NaveenBhat 2013-09-05 11:12:46