web-dev-qa-db-ja.com

Response.Statusを設定すると「HTTPステータス文字列が無効です」例外が生成される

ASP.NET 4.0とIIS7でHTTPハンドラーを作成していますが、ファイルが見つからない状態を生成する必要があります。

Mathew McDonaldの新しい本、Pro ASP.Net 4から次のコードをC#2010にコピーしました(応答変数は現在のHttpResponseのインスタンスです)。

response.Status = "File not found";
response.StatusCode = 404;

ただし、最初の行でランタイムエラーHTTP status string is not valid.が生成されることがわかりました

上記の行の代わりに、以下を使用する場合:

response.Status = "404 Not found";

その後、すべてが正常に動作するようです。実際、response.StatusCodeが自動的に404に設定されていることもわかります。

私の問題は、これが運用サーバーで失敗しないようにすることです。ですから、これを達成するための「正しい」方法を理解できれば、ずっと気分が良くなるでしょう。最初のアプローチがMathew McDonaldで機能したのになぜ私では機能しなかったのですか?そして、2番目のアプローチは常に信頼できるでしょうか?

誰かが何かヒントを提供できますか?

36
Jonathan Wood

Status プロパティは、メッセージだけでなく、クライアントに送信される完全なステータス行であるためです。

あなたはどちらかを書くことができます:

response.Status = "404 File not found";

または、できれば:

response.StatusCode = 404;
response.StatusDescription = "File not found";

そのドキュメントによると、HttpResponse.StatusHttpResponse.StatusDescription の代わりに廃止されました。

62