Как вы вызываете обратный вызов "ошибка" в вызове JQuery AJAX с помощью ASP.NET MVC?
Это связано с моим вопросом о как обрабатывать ошибки из jQuery AJAX-вызовов. В нескольких ответах было высказано предположение, что я использую обратный вызов "ошибка", чтобы отображать любые ошибки из вызова JQuery AJAX. Мне было интересно, как это сделать с помощью ASP.NET MVC. Есть ли способ для моего действия контроллера вернуть ошибку, которая будет доступна из обратного вызова "ошибка"? Код на стороне клиента будет выглядеть примерно так:
$.ajax({
type: "POST",
url: "MyUrl",
data: "val1=test",
success: function(result){
// Do stuff
},
error: function(request,status,errorThrown) {
}
});
Ответы
Ответ 1
ПРИМЕЧАНИЕ. Эй, это было опубликовано до того, как ASP.Net MVC даже поразил 1.0, и с тех пор я даже не смотрел рамки. Вероятно, вам стоит остановиться на этом.
Сделайте что-то вроде этого:
Response.StatusCode = (int)HttpStatusCode.BadRequest;
actionResult = this.Content("Error message here");
Код состояния должен изменяться в зависимости от характера ошибки; как правило, 4xx для пользовательских проблем и 5xx для проблем на стороне сервера.
Ответ 2
Если вы используете
[HandleError]
то бросание HttpException будет поймано и перенаправлено на вашу страницу пользовательских ошибок.
Другой вариант - использовать
Response.StatusCode = 500;
Response.Write("Error Message");
Response.End();
Вероятно, более удобный способ написать это, но я еще не наткнулся на него.
Ответ 3
Если вы используете MVC 3, вы можете вернуть ActionResult в свой контроллер, у которого есть код состояния HTTP и сообщение о состоянии вместе:
return new HttpStatusCodeResult(500, "Error message");
Затем в обратном вызове ошибки:
error: function (request, textStatus, errorThrown) {
alert(request.statusText);
}
Ответ 4
Я думаю, что событие возникает для любого ответа с кодом ответа, отличным от 200. Я не могу найти доказательства этого в документах.
Чтобы сделать это из кода (работает в Webforms):
throw new HttpException(500, "Error message");
Ответ 5
Согласно этой странице, вам просто нужно применить заголовок HTTP/1.0 500 Internal Server Error
на странице ASP.net. Запрос $.ajax
поймает эту ошибку и выполнит функцию обратного вызова error
. =]
Ответ 6
Я посылаю вам предложение; работает с противоречивыми и неконтролируемыми исключениями.
public class CodeExceptionToHttpFilter : FilterAttribute, IExceptionFilter
{
public CodeExceptionToHttpFilter()
{
Order = 2;
}
public void OnException(ExceptionContext filterContext)
{
var codeException = filterContext.Exception as CodeException;
var response = filterContext.RequestContext.HttpContext.Response;
response.StatusCode = (codeException == null)? 550: 551;
response.ContentType = MediaTypeNames.Text.Plain;
response.Charset = "utf-8";
response.Write(filter.Exception.Message);
filterContext.ExceptionHandled = true;
response.TrySkipIisCustomErrors = true;
}
}
Дополнительная информация о моем блоге.
http://rodrigopb.wordpress.com/2012/11/28/gestion-de-errores-en-peticiones-ajax-a-mvc/