Обработка ошибок jQuery Ajax, показ пользовательских сообщений об исключениях

Вы можете использовать страницы Razor без MVC; это называется ASP.Net WebPages.

Просто добавьте файлы .CSHTML в обычный проект ASP.Net 4.0.

Я объяснил, как это работает в моем блог.

693
задан Roman C 19 December 2016 в 23:00
поделиться

5 ответов

Я полагаю, что обработчик ответов Ajax использует Код состояния HTTP, чтобы проверить, была ли ошибка.

Поэтому, если Вы просто выдаете исключение Java на своем серверном коде, но тогда ответ HTTP не имеет 500 кодов статуса, jQuery (или в этом случае вероятно, объект XMLHttpRequest) просто предположит, что все было прекрасно.

я говорю это, потому что у меня была подобная проблема в ASP.NET, где я бросал что-то как ArgumentException ("Не знают, что сделать..."), но обработчик ошибок не стрелял.

я тогда установил Response.StatusCode или на 500 или на 200, была ли у меня ошибка или нет.

5
ответ дан Peter Mortensen 19 December 2016 в 23:00
поделиться

Удостоверьтесь, что Вы - установка Response.StatusCode к чему-то другому, чем 200. Запишите сообщение своего исключения с помощью Response.Write, затем используйте...

xhr.responseText

.. в Вашем JavaScript.

340
ответ дан Sprintstar 19 December 2016 в 23:00
поделиться

Выбросить новое исключение на сервере, используя:

REATIC.STATUSCODOCODE = 500

Ответ. Statusdescription = ex.message ()

Я считаю, что статус зависит от Ajax Call ...

Пример:

        Try

            Dim file As String = Request.QueryString("file")

            If String.IsNullOrEmpty(file) Then Throw New Exception("File does not exist")

            Dim sTmpFolder As String = "Temp\" & Session.SessionID.ToString()

            sTmpFolder = IO.Path.Combine(Request.PhysicalApplicationPath(), sTmpFolder)

            file = IO.Path.Combine(sTmpFolder, file)

            If IO.File.Exists(file) Then

                IO.File.Delete(file)

            End If

        Catch ex As Exception

            Response.StatusCode = 500

            Response.StatusDescription = ex.Message()

        End Try
3
ответ дан 22 November 2019 в 21:35
поделиться

Controller:

public class ClientErrorHandler : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        var response = filterContext.RequestContext.HttpContext.Response;
        response.Write(filterContext.Exception.Message);
        response.ContentType = MediaTypeNames.Text.Plain;
        filterContext.ExceptionHandled = true;
    }
}

[ClientErrorHandler]
public class SomeController : Controller
{
    [HttpPost]
    public ActionResult SomeAction()
    {
        throw new Exception("Error message");
    }
}

View script:

$.ajax({
    type: "post", url: "/SomeController/SomeAction",
    success: function (data, text) {
        //...
    },
    error: function (request, status, error) {
        alert(request.responseText);
    }
});
214
ответ дан 22 November 2019 в 21:35
поделиться

Вероятно, это вызвано тем, что имена полей JSON не имеют кавычек.

Измените структуру JSON с:

{welcome:"Welcome"}

на:

{"welcome":"Welcome"}
7
ответ дан 22 November 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: