我正在使用.NET(C#)中的HttpListener创建REST API。除了一个小问题外,这一切都很好。
我正在尝试使用状态代码而不是OK(200)返回响应,例如ResourceNotFound(404)。
当我将HttpListenerResponse的StatusCode设置为200以外的其他东西,并创建一个响应体(使用HttpListenerResponse.OutputStream)时,它似乎将状态代码重置为200.我无法发送响应StatusCode 404和消息正文。但是,根据HTTP规范,这应该是可能的。我正在和Fiddler一起检查请求和回复,但我无法得到我正在寻找的东西。
答案 0 :(得分:5)
我遇到了同样的问题并找到了问题的根源:
如果您在public class TaskCellConfigurator implements CellConfigurator<Task> {
public void configureCell(TreeCell<Component> cell, Task item, boolean empty) {
// task-specific implementation...
}
}
之前在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);
}