web-dev-qa-db-ja.com

Asp.net MVCで404アクション結果または例外をスロー/返し、IISで処理する

アクションから404またはFileNotFound例外/結果をスローし、IISを使用してcustomErrors構成セクションを使用して404ページを表示するにはどうすればよいですか?

私のようにcustomErrorsを定義しました

<customErrors mode="On" defaultRedirect="/trouble">
  <error statusCode="404" redirect="/notfound" />
</customErrors>

これを追加しようとするactionResultでの最初の試行は機能しません。

public class NotFoundResult : ActionResult {
    public NotFoundResult() {

    }

    public override void ExecuteResult(ControllerContext context) {
        context.HttpContext.Response.TrySkipIisCustomErrors = false;
        context.HttpContext.Response.StatusCode = 404;
    }
}

しかし、これは単に/ not-foundページではなく、空白のページを表示するだけです

:(

私は何をすべきか?

47
CVertex

ASP.NET MVC 3は HttpNotFoundResult アクション結果を導入しました。これは、httpステータスコードで例外を手動でスローするよりも優先して使用する必要があります。これは、コントローラーの Controller.HttpNotFound メソッドを介して返すこともできます。

public ActionResult MyControllerAction()
{
   ...

   if (someNotFoundCondition)
   {
       return HttpNotFound();
   }
}

MVC 3より前は、次を実行する必要がありました。

throw new HttpException(404, "HTTP/1.1 404 Not Found");
133
Rob Levine

Controller.HttpNotFoundを呼び出すことができます

http://msdn.Microsoft.com/en-us/library/system.web.mvc.controller.httpnotfound(v = vs.98).aspx

if (model == null)
{
    return HttpNotFound();
}
6
Simon
2
tugberk