使用HttpListener自定义404

时间:2013-09-17 10:24:51

标签: c# .net http .net-4.5 httplistener

我遇到了HttpListener的问题,它运行得很好(包括返回404)但是如果我向输出Stream写任何东西(为404返回自定义html)那么即使我设置状态代码= 404 firebug显示状态200 ok,一旦我删除了自定义html,它就会看到预期的404。

因为我得到了404,如果我取消注释2个注释行,我得到我想要显示的HTML但是200,而我期望404:

    //var buffer = System.Text.Encoding.UTF8.GetBytes("<html><head></head><body><h1>404 not found</h1></body></html>");
    //ctx.Response.OutputStream.Write(buffer, 0, buffer.Length);
    ctx.Response.StatusCode = 404;

1 个答案:

答案 0 :(得分:5)

由于HTTP协议要求在内容之前发送状态代码,因此一旦您写入输出流,就会自动为您发送状态200,然后是您写入流中的任何内容。如果您在写入输出流后尝试设置状态代码,则已经太晚了。