2

InvalidOperationExceptionでカスタム404を表示するために、次のベースコントローラーを作成しました(たとえば、ビューが見つかりません)。

public class HandlesViewNotFoundController : Controller
{
    protected override void OnException(ExceptionContext filterContext)
    {
        //InvalidOperationException is thrown if the path to the view
        // cannot be resolved by the viewengine
        if (filterContext.Exception is InvalidOperationException)
        {
            if (!filterContext.ExceptionHandled)
            {
                filterContext.ExceptionHandled = true;
                filterContext.Result = new ViewResult { ViewName = "_404" };
                filterContext.HttpContext.Response.StatusCode = 404;
                Response.Clear();

                // Clear the error on server.
                Server.ClearError();

                // Avoid IIS7 getting in the middle
                Response.TrySkipIisCustomErrors = true;
            }
        }
        base.OnException(filterContext);
    }
}

何らかの理由で、404をトリガーするページを開くと、デバッグ時にローカルで、サーバーでページを表示するときにローカルで完全に機能しますが、サーバーでリモートで確認したのと同じURLを表示すると、内部サーバーエラー(500)が返されます。

何か案は?

4

2 に答える 2

2

customeErrors属性がweb.config(およびデプロイされたトランスフォーム)で正しく構成されていることを確認し、グローバルフィルターHandleErrorをコメントアウトします。

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    //filters.Add(new HandleErrorAttribute());
}
于 2012-12-29T17:32:22.530 に答える
0

ビューファイル_404をサーバーにデプロイするのを忘れた可能性があります。

于 2012-12-28T23:22:48.323 に答える