3

コントローラー/ビューが見つからない場合のために、ASP.NET MVC 3 の一般的なケースの 404 処理を実装しました。しかし、ユーザーが見つからないものにアクセスしようとしている場合、コントローラー内でどのように処理する必要がありますか? たとえば、www.foo.bar/Games/Details/randomjunkこれを内部で呼び出しますGamesController

public ActionResult Details(string id) // id is 'randomjunk'
{
  if(DoesGameExist(id) == false)
    // Now what?

私はそれを行うことができましたreturn Redirect('/Errors/Http404');が、それは正しい方法ではないようです。例外をスローする必要がありますか、それとも何か他のものをスローする必要がありますか?

この場合、特別なビューを持つことができますが、まず、いくつかのケースに適用できる良い方法が必要です。

編集: 一般的なケースで既に持っているフレンドリーな 404 ページを表示したい。

4

3 に答える 3

9

HttpException404をスローする必要があります。

throw new HttpException(404, "Page not Found");
于 2012-04-15T15:21:20.770 に答える
5

編集: どうやらDarin Dimitrovによると、私が以前持っていたものはcustomErrors. アントニオ・バクラ他の答えで言っているように、あなたはしなければなりません:

throw new HttpException(404, "Not found")

その後、customErrors が機能します。

組み込みのヘルパー メソッドが呼び出されるHttpNotFoundので、次のことができます。

return HttpNotFound();

HttpStatusCodeResult で 404 を明示的に返すこともできます。

新しい HttpStatusCodeResult(404) を返します。

HttpStatusCodeResult必要なコードに特定のヘルパー メソッドまたはクラスがない場合に役立ちます。

これも Web.config に含める必要があります。

<customErrors>
    <error statusCode="404" redirect="~/Custom404Page.html"/>
</customErrors>

また、他のステータスの追加の行とdefaultRedirect.

于 2012-04-15T15:13:45.587 に答える
1

HttpStatusCodeResultを返すことができます。

return new httpStatusCodeResult(404);
于 2012-04-15T15:52:15.550 に答える