为什么Firefox对此204(无内容)响应有问题?

时间:2018-10-19 18:50:48

标签: c# ajax firefox asp.net-web-api http-status-code-204

我正在从jQuery AJAX调用WebAPI控制器,以请求通过REST API删除项目。

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("{}")是一种尝试提供一些内容来帮助Firefox的尝试。我也尝试过new StringContent("null"),但结果相同。

此外,如果在Firefox中检查了第二个响应,则会发现以下错误消息:

  

SyntaxError:JSON.parse:第1行第1列的数据意外结束   JSON数据

似乎Firefox试图解析有问题的204,但显然没有尝试解析第一个204响应。

此外,请求类型(“删除”与“获取”)似乎并不重要:如果我从第一次调用中以IHttpActionResult的身份返回204,那么Firefox仍然不喜欢它。

Firefox也将第一个响应显示为包含168个字节,第二个响应显示为包含0个字节,即使它很高兴地显示标题(如下所示)。 Firefox显然对某些事情感到沮丧。

enter image description here

谁能解释为什么Firefox在作为IHttpActionResult的实现交付时却出现204响应的问题,而不是为什么当作为HttpResponseMessage的交付而出现问题?

[第一个请求返回一个HttpResponseMessage而第二个请求返回一个IHttpActionResult的原因是第一个方法已经存在很长时间了,而第二个方法才是现在被添加。而且由于IHttpActionResult更易于测试,我们想使用它。]

0 个答案:

没有答案