Есть ли способ вернуть необработанный текст вместо html из исключения на стороне сервера в asp.net-mvc при вызове ajax? - PullRequest
4 голосов
/ 23 января 2012

Я вижу, что получаю большой HTML-текст, когда возвращаю HttpException () от вызова ajax.

, если я делаю что-то подобное в моем контроллере:

   if (errors.Count > 0)
        {
            throw new HttpException(404, "This is my custom error msg");
        }

iхочу хороший простой способ разобрать это сообщение об ошибке на стороне JavaScript.Прямо сейчас, когда я смотрю на обратный вызов на стороне клиента с чем-то вроде этого

  function decodeErrorMessage(jqXHR, textStatus, errorThrown) {

, я вижу, что jqxHR = "3", textStatus = очень длинный HTML-документ (со стеком вызовов и сообщением об ошибке иerrorThrown - это «ошибка»

Каков наилучший способ просто вернуться назад и показать ошибку из исключения http?

1 Ответ

5 голосов
/ 23 января 2012

Вместо того, чтобы выдавать исключение в контроллере, перехватите его и установите код ответа для ответа AJAX:

Просмотр настройки логики с помощью JQuery:

    $("#btnRefresh").live("click", function(e) {
        $.ajax({
            type: "POST",
            url: '@Href("~/Home/Refresh")',
            data: "reportId=@Model.Id"
        })
        .done(function(message) {
            alert(message);
        })
        .fail(function(serverResponse) {
            alert("Error occurred while processing request: " + serverResponse.responseText);
        });

        e.preventDefault();
    });

Затем в коде вашего контроллеравы получаете исключение вместо того, чтобы его выбросить:

    [HttpPost, VerifyReportAccess]
    public ActionResult Refresh(Guid reportId)
    {
        string message;

        try
        {
            message = _publisher.RequestRefresh(reportId);
        }
        catch(Exception ex)
        {
            HttpContext.Response.StatusCode = (Int32)HttpStatusCode.BadRequest;
            message = ex.Message;
        }

        return Json(message);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...