2011-01-09 2 views
33

ASP.NET 4.0とIIS7でHTTPハンドラを作成していますが、ファイルが見つからない条件を生成する必要があります。Response.Statusを設定すると「HTTPステータス文字列が無効です」例外

私はしかし、私はことがわかったのC#2010(応答変数は、現在のHttpResponseのインスタンスである。)

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

にマシューマクドナルドの新しい本、プロASP.Net 4から次のコードをコピー

response.Status = "404 Not found"; 

その後、すべてがWOに思える:代わりに、上記の行で、私は以下を使用し、場合、最初の行は、実行時エラーHTTP status string is not valid.

を生成し、 rk良い。実際、私はその反応を見る.StatusCodeは自動的に404に設定されている。

私の問題は、プロダクションサーバーでこれが失敗しないようにすることです。だから私はこれを達成するための「正しい」方法を理解できれば、もっと良い気分になるだろう。最初のアプローチはなぜマシュー・マクドナルドには効いたのですか?そして、第二のアプローチはいつも信頼できるものになっていますか?

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

答えて

56

これは、Statusプロパティが、メッセージだけでなくクライアントに送信される完全なステータス行であるためです。その文書によると、HttpResponse.StatusHttpResponse.StatusDescriptionの賛成で廃止されました、という

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

注:

こともできますし、書き込み:

response.Status = "404 File not found"; 

または、好ましくは。

+0

これは、私が今までに出版された本の中で他のコードをどのように取得したかについて、私を暗闇の中に残しています。 –

+8

また、興味があれば、StatusCodeを404に設定すると、StatusDescriptionが自動的に「見つからない」に設定されます。しかし、正確なルールが何であるかを知るのは難しい(これは将来的になるだろう)。 StatusCodeとStatusDescriptionの両方を設定するのが最善の方法かもしれません。 –

+1

ファイルが見つからないということではなく、そのURLにリソースがないという理由から、「File Not Found」ではなく「Not Found」に設定するディスク上に – Andy