1

Firefox で問題が発生しました。HttpListener を使用して Web サービスを実装します。私が今遭遇した唯一の問題は、Firefoxが私の404を正しく解釈していないようだということです。

HttpResponse オブジェクトで行うことは、StatusCode を 404 に設定して閉じることだけです。他には何もありません。

Internetexplorer は標準の 404 ページを正しく表示します。Firefox は空のページを表示します。たとえば、URL が xml で終わる場合、XML 解析エラーが発生します。

私は何を間違っていますか?

これは実際にはあまり機能しないコードですが、それが問題かもしれません。わかりません。

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

ステータスコードが正しく受信されているかどうかを確認するために、firefox 用のアドインをインストールしました。です。

4

1 に答える 1

1

通常、Web サーバーは、404.html のように、ページが見つからない場合に表示する個別の 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 ファイルを用意し、そのような場合にそのコンテンツを提供することです。

于 2013-12-28T03:57:05.553 に答える