HttpListenerResponse 404和Firefox没有解释它

时间:2013-05-08 08:37:40

标签: internet-explorer c#-4.0 firefox

我收到了Firefox的问题。我使用HttpListener实现了Web服务。 工作得很好,我现在遇到的唯一问题是,firefox似乎没有正确解释我的404。

我对HttpResponse对象的所有操作都将StatusCode设置为404并关闭它。 没别了。

Internetexplorer正确显示标准404页面,Firefox显示空白页面,或者如果网址以xml结尾,则会出现XML-Parsing错误。

我做错了什么?

这里的代码并没有真正做到,但这可能是问题,我不知道。

void handlePageNotFound(HttpListenerResponse response)
{
    response.StatusCode = 404;
    response.Close();
}

我为firefox安装了一个插件来检查状态代码是否正确接收。它是。

1 个答案:

答案 0 :(得分:1)

通常,Web服务器会保留单独的html文件,以便在找不到页面时显示,例如404.html。因此,除了发送此消息之外,我认为Mozilla会等待Web服务器提供适当的内容,而不是显示默认页面。

所以我在response.StatusCode = 404

中添加了额外的行
try
{
    context.Response.ContentType = "text/html";
    string str = "<center>404 - Page not found</center>";
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);                    
    context.Response.OutputStream.Write(bytes, 0, bytes.Length);
    context.Response.OutputStream.Flush();
    context.Response.StatusCode = (int)((e is FileNotFoundException || e is DirectoryNotFoundException) ? HttpStatusCode.NotFound : HttpStatusCode.InternalServerError);
    context.Response.StatusDescription = e.Message;
}
catch
{
    Logger.LogError("Exception processing request 'ProcessFileRequest' - Catch block: {0}", e);
}

更好的方法可能是拥有404.html文件并为此类案例提供内容。