为了账号安全,请及时绑定邮箱和手机立即绑定

ASP.NETMVC 404错误处理

ASP.NETMVC 404错误处理

呼唤远方 2019-07-08 15:31:20
ASP.NETMVC 404错误处理我在ASP.NETMVC中404 http错误处理程序(RC 5)我仍然得到标准404错误页面。我需要更改IIS中的某些内容吗?
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

还有另一个解决办法。

将ErrorController或静态页面添加到包含404错误信息的页面中。

修改web.config(在控制器的情况下)。

<system.web>
    <customErrors mode="On" >
       <error statusCode="404" redirect="~/Errors/Error404" />
    </customErrors></system.web>

或者在静态页面的情况下

<system.web>
    <customErrors mode="On" >
        <error statusCode="404" redirect="~/Static404.html" />
    </customErrors></system.web>

这将处理错过的路线和错过的行动。


查看完整回答
反对 回复 2019-07-08
?
POPMUISE

TA贡献1765条经验 获得超5个赞

马可的反应是最好的解决办法。我需要控制我的错误处理,我的意思是真正控制它。当然,我已经稍微扩展了解决方案,并创建了一个完整的错误管理系统来管理一切。我也在其他博客上读到过这个解决方案,它似乎被大多数高级开发人员所接受。

下面是我使用的最后代码:

protected void Application_EndRequest()
    {
        if (Context.Response.StatusCode == 404)
        {
            var exception = Server.GetLastError();
            var httpException = exception as HttpException;
            Response.Clear();
            Server.ClearError();
            var routeData = new RouteData();
            routeData.Values["controller"] = "ErrorManager";
            routeData.Values["action"] = "Fire404Error";
            routeData.Values["exception"] = exception;
            Response.StatusCode = 500;

            if (httpException != null)
            {
                Response.StatusCode = httpException.GetHttpCode();
                switch (Response.StatusCode)
                {
                    case 404:
                        routeData.Values["action"] = "Fire404Error";
                        break;
                }
            }
            // Avoid IIS7 getting in the middle
            Response.TrySkipIisCustomErrors = true;
            IController errormanagerController = new ErrorManagerController();
            HttpContextWrapper wrapper = new HttpContextWrapper(Context);
            var rc = new RequestContext(wrapper, routeData);
            errormanagerController.Execute(rc);
        }
    }

在我的ErrorManagerController内部:

        public void Fire404Error(HttpException exception)
    {
        //you can place any other error handling code here
        throw new PageNotFoundException("page or resource");
    }

现在,在我的操作中,我抛出了我创建的自定义异常。并且我的Controller是从我创建的自定义Controller类继承的。创建自定义基本控制器是为了覆盖错误处理。下面是我的定制BaseController类:

public class MyBasePageController : Controller{
    protected override void OnException(ExceptionContext filterContext)
    {
        filterContext.GetType();
        filterContext.ExceptionHandled = true;
        this.View("ErrorManager", filterContext).ExecuteResult(this.ControllerContext);
        base.OnException(filterContext);
    }}

上面代码中的“ErrorManager”只是一个使用基于ExceptionContext的模型的视图

我的解决方案工作完美,我能够处理我的网站上的任何错误,并显示基于任何异常类型的不同消息。


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 338 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信