自定义错误页面不起作用

时间:2015-12-16 11:23:46

标签: c# asp.net

在试图找出为什么Global.asax无法工作的同时,我决定转向自定义错误并开始遇到问题。我正在测试404(找不到页面),它一直给我标准服务器错误页面而不是我自己的页面。

我尝试在IIS端设置它并且不起作用。实际上,设置匹配似乎会引发更多错误。我已删除该更改以将其返回到当前问题。我提供了我为制作此错误页面所做的更改。也许比我更聪明的人可以弄清楚出了什么问题?

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error.aspx" />

任何帮助都受到广泛赞赏!我确实检查了Error.aspx是否存在,它确实存在,我知道它不是一个真正的404页面未找到问题

编辑:尝试建议重复的答案,但它不起作用

编辑2:这是屏幕上显示的错误

  

HTTP错误404.0 - 未找到

     

您要查找的资源已被删除,名称已更改或暂时不可用。

     

最有可能的原因是:

     
      
  • Web服务器上不存在指定的目录或文件。
  •   
  • 网址包含印刷错误。
  •   
  • 自定义过滤器或模块(如URLScan)会限制对文件的访问。
  •   
     

你可以尝试的事情:

     
      
  • 在Web服务器上创建内容。
  •   
  • 查看浏览器网址。
  •   
  • 检查失败的请求跟踪日志,并查看哪个模块正在调用SetStatus。欲了解更多信息,请点击此处。
  •   
     

详细错误信息:

     

模块      IIS Web Core

     

通知      MapRequestHandler

     

处理程序      StaticFile

     

错误代码      0x80070002

1 个答案:

答案 0 :(得分:-1)

我建议你使用一个特定于此的控制器,例如:

[AllowAnonymous]
    public class ErroHttpController : Controller
    {
        [Route("RequestError")]
        public ActionResult RequestError()
        {
            Response.StatusCode = 400;
            return View();
        }

        [Route("NotFound")]
        public ActionResult NotFound()
        {
            Response.StatusCode = 404;
            return View();
        }

        [Route("InternalError")]
        public ActionResult InternalError()
        {
            Response.StatusCode = 500;
            return View();
        }

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            Response.TrySkipIisCustomErrors = true;
            base.OnActionExecuting(filterContext);
        }
    }
}

在你的web.config中你应该这样做:

<customErrors mode="RemoteOnly">
      <error statusCode="400" redirect="/RequestError"/>
      <error statusCode="404" redirect="/NotFound"/>
      <error statusCode="500" redirect="/InternalError"/>
</customErrors>

您必须在OnActionExecuting方法中跳过IIS自定义错误,例如上面的代码。