Почему у Firefox проблема с этим ответом 204 (без содержимого)? - PullRequest
0 голосов
/ 19 октября 2018

Я вызываю контроллер WebAPI из jQuery AJAX, чтобы запросить удаление элемента через API REST.

Контроллер WebAPI возвращает ответ 204 (без содержимого), который затем вызывает второй запрос (GET).В этом примере я ожидаю, что оба запроса получат ответ 204 (без содержимого).

При просмотре в Chrome оба ответа полностью распознаются.

enter image description here

Однако Firefox не может справиться с 204. Если он не содержит содержимого.

Для получения снимков экрана Chrome (вверху) и Firefox (ниже) одинаковые запросы были отправлены в WebAPI.контроллер из обоих браузеров.На приведенном ниже снимке экрана показано, что Firefox распознает только первый ответ 204.

enter image description here

Ответ на эти два запроса создается по-разному:

Первый ответ использует ...

return Request.CreateResponse(HttpStatusCode.NoContent);

... который возвращает экземпляр HttpResponseMessage.

Второй ответ использует ...

return new NoContentResult();

... которую мы определили как реализацию IHttpActionResult ...

public class NoContentResult : IHttpActionResult
{
    private readonly HttpRequestMessage _request;

    public NoContentResult(HttpRequestMessage request)
    {
        _request = request;
    }

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        var response = _request.CreateResponse(HttpStatusCode.NoContent, new StringContent("{}"));
        return Task.FromResult(response);
    }
}

new StringContent("{}") в строке 4-й от последней является попыткой предоставить некоторый контент в помощь Firefox.Я также пытался new StringContent("null") с тем же результатом.

Кроме того, если этот второй ответ проверен в Firefox, обнаруживается следующее сообщение об ошибке:

SyntaxError: JSON.parse: неожиданное завершение данных в строке 1 столбца 1 данных JSON

Кажется, что Firefox пытается проанализировать этот проблемный 204, но он, очевидно, не пытается анализировать первый ответ 204.

Более того, тип запроса (DELETE vs. GET), похоже, не имеет значения: если я возвращаю 204 как IHttpActionResult из первого вызова, тогда Firefox все равно не понравится.

Firefox также отображает первый ответ, содержащий 168 байтов, а второй - 0 байтов, хотя он с радостью отображает заголовки (ниже).Firefox явно чем-то расстроен.

enter image description here

Может кто-нибудь объяснить, почему у Firefox возникает проблема с ответом 204 при доставке в виде реализации IHttpActionResult, ноне когда он доставляется как HttpResponseMessage?

[ Причина, по которой первый запрос возвращает HttpResponseMessage, а второй возвращает IHttpActionResult, заключается в том, что первый метод был установлен длядолгое время, тогда как второй метод добавляется только сейчас.И поскольку IHttpActionResult проще для тестирования, мы бы хотели использовать это. ]

...