首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IIS 8异常筛选器未注册

IIS 8异常筛选器未注册
EN

Stack Overflow用户
提问于 2014-05-27 23:46:34
回答 1查看 274关注 0票数 0

我有一个带有错误过滤器的MVC4应用程序来捕获所有未处理的异常。

代码语言:javascript
复制
public class GlobalErrorHandler : FilterAttribute, IExceptionFilter
    {
        private readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(GlobalErrorHandler));

        public void OnException(ExceptionContext filterContext)
        {
            if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
                return;

            var statusCode = (int)HttpStatusCode.InternalServerError;
            if (filterContext.Exception is HttpException)
            {
                statusCode = (filterContext.Exception as HttpException).GetHttpCode();
            }
            else if (filterContext.Exception is UnauthorizedAccessException)
            {
                //to prevent login prompt in IIS
                // which will appear when returning 401.
                statusCode = (int)HttpStatusCode.Forbidden;
            }

            var controllerName = (string)filterContext.RouteData.Values["controller"];
            var actionName = (string)filterContext.RouteData.Values["action"];
            var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
            var result = new ViewResult
                                    {
                                        ViewName = "~/Views/Shared/Error.cshtml",
                                        ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
                                    };
            filterContext.Result = result;


            logger.Error("Error Controller: " + controllerName + " Action: "+ actionName + "Exception: " + filterContext.Exception.StackTrace);
            // Prepare the response code.
            filterContext.ExceptionHandled = true;
            filterContext.HttpContext.Response.Clear();
            filterContext.HttpContext.Response.StatusCode = statusCode;
            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
        }
    }

注册为:

代码语言:javascript
复制
public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new GlobalErrorHandler());
    }
}

在Visual Studion和IIS7.5(Win 7)上工作正常(显示自定义错误页面),但在IIS8.5(Win Server 2012 R2)上,当抛出一些未处理的异常时,会显示内部服务器错误页面。如何在IIS 8上启用错误处理程序?

编辑:可能是.Net MVC custom error page not working in IIS8的副本。我明天会试一试。

EN

回答 1

Stack Overflow用户

发布于 2014-05-29 15:45:36

添加

代码语言:javascript
复制
<system.webServer>
    <httpErrors errorMode="Detailed" />
</system.webServer>

正如这里所说的,.Net MVC custom error page not working in IIS8修复了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23893703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档