ASP.NET: Webmethos не возвращает полезную нагрузку, когда http статус 4xx - PullRequest
0 голосов
/ 15 октября 2018

У меня есть следующий код:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static MyResponse myMethod(ParameterClass parameters)
{
    MyResponse resp = new MyResponse();
    resp.errors.Add("Some error message");
    HttpContext.Current.Response.StatusCode = 400;
    return resp;
}

, выполняющий это с jQuery.ajax с использованием URL MyPage.aspx / myMethod, этот вызов не возвращает мою полезную нагрузку из объекта MyResponse.Как только я переключаю код состояния на 200, возврат работает с помощью обратного вызова success в ajax, но я хочу вернуть пользовательские сообщения об ошибках с кодами состояния 4xx и 5xx, как заставить его работать.

Похоже, IIS являетсяпроблема, но что мне нужно сделать, чтобы по-прежнему разрешать возвращать объекты моего класса при ошибке?

Обновление 1: я также наблюдал за вкладкой сети в Chrome, IIS вообще не возвращает полезную нагрузкутак что jQuery не может быть проблемой.

Обновление 2: мой вызов jquery ajax

$.ajax({
  url: 'MyPage.aspx/myMethod',
  data: JSON.stringify({ parameters: request }),
  dataType: "json",
  type: "POST",
  contentType: "application/json; charset=utf-8",
  success: function (data) {
    ...
  },
  error: function (data) {
    // data.responseJSON is undefined and data.responseText contains only HTTP status code text, like "Bad Request" when code was 400.
  }
});

1 Ответ

0 голосов
/ 16 октября 2018

Ok нашел его в другом сообщении stackoverflow.

Решением было добавить следующее в web.config:

<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough" >
  <clear/>
</httpErrors>

По умолчанию IIS заменяет ответ на ошибку, здесьАтрибут «существующий ответ = PassThrough» является ключом.Теперь responseJSON и responseText заполнены моим пользовательским контентом, возвращаемым webmethod.

Найден в HttpResponseMessage, содержимое теряется, когда HTTP-статус неверный запрос

...