4

我正在使用 .NET (C#) 中的 HttpListener 创建 REST API。这一切都很好,除了一个小问题。

我正在尝试使用 OK (200) 以外的状态代码返回响应,例如 ResourceNotFound (404)。

当我将 HttpListenerResponse 的 StatusCode 设置为 200 以外的值并创建响应正文(使用 HttpListenerResponse.OutputStream)时,它似乎将状态码重置为 200。我无法使用 StatusCode 404 发送响应和消息体。但是,根据 HTTP 规范,这应该是可能的。我正在使用 Fiddler 检查请求和响应,但我无法得到我想要的东西。

4

1 回答 1

6

我遇到了同样的问题并找到了问题的根源:

如果您在OutputStream 之前设置的(或任何其他属性)中写入正文,则将在应用修改之前StatusCode发送响应!

因此,您必须按以下顺序进行:

public void Send(HttpListenerContext context, byte[] body)
{
    // First, set a random status code and other stuffs
    context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
    context.Response.ContentType = "text/plain";

    // Write to the stream IN LAST (will send request)
    context.Response.OutputStream.Write(body, 0, body.Length);
}
于 2015-06-03T14:06:31.127 回答