2013-05-08 36 views
1

我得到了一個與Firefox的問題。我使用HttpListener實現了一個Webservice。 工作得很好,我現在遇到的唯一問題是,那firefox似乎不正確地解釋我的404。HttpListenerResponse 404和Firefox沒有解釋它

我用HttpResponse對象做的所有事情都是將StatusCode設置爲404並關閉它。 沒有別的。

Internetexplorer正確顯示標準404頁面,Firefox顯示空白頁面,或者如果url以xml結尾,例如,它會給出XML解析錯誤。

我在做什麼錯?

這裏是代碼沒有做太多的事情,但這可能是問題,我不知道。

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

我安裝了一個firefox插件來檢查狀態碼是否被正確接收。它是。

+0

我有同樣的問題。瀏覽器不顯示404頁面。當用戶請求圖像文件時,情況尤其惡化。試圖顯示圖像文件並顯示無效的文件信息。 – phoad 2013-12-28 03:43:33

回答

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文件,併爲這樣的情況下提供其內容。

+0

雖然這仍然只是一個「workarround」。 – CSharpie 2014-01-01 20:51:58