自定义 HttpListener 的 404 页面

6
我遇到了HttpListener的问题,它正常工作(包括返回404),但如果我向输出流写入任何内容(以返回自定义的404 html),即使我将状态码设置为404,Firebug也会显示状态码为200 OK。一旦我删除自定义html,它便会看到预期的404。
在当前情况下,我得到了404,如果取消注释两行,则会显示我想要的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个回答

7

由于HTTP协议要求状态码在内容之前发送,所以一旦您向输出流写入内容,系统会自动发送200状态码,然后是您写入输出流的任何内容。如果您在向输出流写入内容之后尝试设置状态码,则为时已晚。


你认为微软可以设计一个界面,使这一点显而易见。 - A.R.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接