3

正文返回错误页我正在使用.NET(C#)中的HttpListener创建REST API。除了一个小问题,这一切都很好。如何使用HttpListener/HttpListenerResponse

我试图返回状态代码而不是OK(200),例如ResourceNotFound(404)的响应。

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

+0

我遇到了同样的问题与返回的“201”创建资源时。当返回的状态码是'200'(OK)时,内容主体似乎是空的。 – MvdV

回答

1

我有同样的问题,找到了问题的根源:

如果你写的机身中设置的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); 
}