AdminError.aspxページとError.aspxページがあり、例外が発生したときにAdminError.aspxを表示したいと思います。両方のファイルが必要です。
なぜこれが機能しないのですか?
<customErrors mode="On" redirectMode="ResponseRedirect" defaultRedirect="AdminError.aspx" />
代わりに、Error.aspxが常に表示されます。
私に何ができる?
AdminError.aspxページとError.aspxページがあり、例外が発生したときにAdminError.aspxを表示したいと思います。両方のファイルが必要です。
なぜこれが機能しないのですか?
<customErrors mode="On" redirectMode="ResponseRedirect" defaultRedirect="AdminError.aspx" />
代わりに、Error.aspxが常に表示されます。
私に何ができる?
Asp.net mvc には、この種の要件を処理するための [HandleError] 属性が用意されています。特定のエラー タイプに基づいてリダイレクトする別のエラー ページ (ビュー) を指定できます。これは非常に柔軟であり、そのようにすることをお勧めします。
例えば
[HandleError(ExceptionType = typeof(NullReferenceException),
View = "NullError")]
[HandleError(ExceptionType = typeof(SecurityException),
View = "SecurityError")]
public class HomeController : Controller
{
public ActionResult Index()
{
throw new NullReferenceException();
}
public ActionResult About()
{
return View();
}
}
詳細については、この同様の質問を参照してください。
ありがとう、
私は解決策を見つけたと思います。
私は HandleErrorWithELMAHAttribute ( How to get ELMAH to work with ASP.NET MVC [HandleError] attribute? ) を使用しており、OnException メソッドでビューを設定しました:
public override void OnException(ExceptionContext context)
{
View = "AdminError"; // this is my view
base.OnException(context);
var e = context.Exception;
if (!context.ExceptionHandled // if unhandled, will be logged anyhow
|| RaiseErrorSignal(e) // prefer signaling, if possible
|| IsFiltered(context)) // filtered?
return;
LogException(e);
}
customErrorsタグのredirectModeおよびdefaultRedirect属性の有無にかかわらず機能することに気付きました。