アクションから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ページではなく、空白のページを表示するだけです
:(
私は何をすべきか?
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");
Controller.HttpNotFoundを呼び出すことができます
http://msdn.Microsoft.com/en-us/library/system.web.mvc.controller.httpnotfound(v = vs.98).aspx
if (model == null)
{
return HttpNotFound();
}