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

检查是否在 web.config(和部署的转换)中正确配置了 customeErrors 属性,并注释掉全局过滤器 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 回答