none
IIS7.5中集成模式的customErrors设置问题 RRS feed

  • 问题

  • 网站中目前web.config配置如下

    <customErrors mode="On" redirectMode="ResponseRedirect">
        <error statusCode="500" redirect="~/Error.aspx?id=500" />
        <error statusCode="404" redirect="~/Error.aspx?id=404" />
    </customErrors>

    当redirectMode="ResponseRewrite"时,Error.aspx中

    var ex = Server.GetLastError(); //返回异常对象

    当redirectMode="ResponseRedirect"时,Error.aspx中

    var ex = Server.GetLastError(); //返回null

    问题:我需要使用redirectMode="ResponseRedirect"并且在Error.aspx中能够获取错误异常。请问该如何实现?


    博客园: dotNetDR_ 的博客 - 天杀下来的BUG,不怕有我来挡!

    博客园介绍: 博客园创立于2004年1月,是面向软件开发者的高品质IT技术社区,聚集了很多优秀的软件开发者和IT技术学习者。

    2013年11月1日 6:06

全部回复

  • 你好,

         如果你使用redirectMode="ResponseRedirect",当前的错误对象不会输出,所以取到是null, 我建议你尝试在 global.asax: Application_Error 中处理该部分逻辑。

         你可以查看下面这个链接,了解更多信息:

        http://stackoverflow.com/questions/14755572/error-page-not-seeing-server-getlasterror-as-having-an-error

         


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年11月4日 2:18
    版主
  • 你好,很高兴收到你的回复。

    我尝试过在global.asax: Application_Error里面处理了。但是我定义的

    <error statusCode="500" redirect="~/Error.aspx?id=500" />

    Error.aspx取不到那个异常对象,我在本机可以发布到Windows Server 2008服务器上就不行了。。好纠结

    之前是在global.asax的Application_Error用Session把Exception存起来,但是到了Error.aspx页后就变空了

    后来就改用System.Web.Caching.Cache结果本地的Win7 IIS上Error.aspx可以取得到异常,放到服务器上怎么取也是null。


    博客园: dotNetDR_ 的博客 - 天杀下来的BUG,不怕有我来挡!

    博客园介绍: 博客园创立于2004年1月,是面向软件开发者的高品质IT技术社区,聚集了很多优秀的软件开发者和IT技术学习者。

    2013年11月4日 2:28
  • 我现在需要的是在自定义的错误异常页(<error statusCode="500" redirect="~/Error.aspx?id=500" />)上面显示出异常的详情(Exception.Message)就行了。


    博客园: dotNetDR_ 的博客 - 天杀下来的BUG,不怕有我来挡!

    博客园介绍: 博客园创立于2004年1月,是面向软件开发者的高品质IT技术社区,聚集了很多优秀的软件开发者和IT技术学习者。

    2013年11月4日 4:04
  • 你好,  

    With ASP.NET 3.5 SP1 Microsoft introduced a new attribute on the <customErrors /> section for the web.config file called redirectMode<sup class="foot-note print-only-inline"> (2)</sup>. Its default value is ResponseRedirect which results in the same behavior as before. However, the setting ResponseRewrite results in the Error404.aspx page being executed and sent to the output using a rewrite, rather than a redirect. This means the address bar in the browser stays the same, and the requested page (which wasn't found) nicely results in a 404 error.

    1.为了解决你的这类问题,你需要在Page's Load event 设定当前错误页面的状态,像这样:

    protected void Page_Load(object sender, EventArgs e)
    {
      Response.Status = "404 Not Found";
      Response.StatusCode = 404;
    }

    2.在Application_Error事件中添加下面的代码:

    protected void Application_Error(object sender, EventArgs e)
    {
      HttpApplication application = (HttpApplication)sender;
      Exception lastError = application.Server.GetLastError();
      HttpException ex = lastError as HttpException;
      string fourOhFourPage = "~/Errors/Error404.aspx";
      // Only response to 404 errors
      if (ex != null && ex.GetHttpCode() == 404)
      {
        // Clear the error in order to avoid standard handling of the error.
        application.Server.ClearError();
        application.Context.Handler = 
              System.Web.UI.PageParser.GetCompiledPageInstance(fourOhFourPage, 
              application.Server.MapPath(fourOhFourPage), application.Context);
      } 
    }

    你可以读这博客,了解更多信息:

    http://imar.spaanjaars.com/497/proper-handling-of-404-errors-using-redirectmode


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. <br/> Click <a href="http://support.microsoft.com/common/survey.aspx?showpage=1&scid=sw%3Ben%3B3559&theme=tech"> HERE</a> to participate the survey.

    2013年11月6日 6:46
    版主
  • 我明天验证一下,今天忙!

    博客园: dotNetDR_ 的博客 - 天杀下来的BUG,不怕有我来挡!

    博客园介绍: 博客园创立于2004年1月,是面向软件开发者的高品质IT技术社区,聚集了很多优秀的软件开发者和IT技术学习者。

    2013年11月6日 9:17
  • To Happy Chen:

    内容我看了,跟我主题内的内容不符。文中只是简述404状态码的,未说明在~/Errors/Error500.aspx上如何获取异常对象。

    不管怎样,还是感谢你的热心回复。


    博客园: dotNetDR_ 的博客 - 天杀下来的BUG,不怕有我来挡!

    博客园介绍: 博客园创立于2004年1月,是面向软件开发者的高品质IT技术社区,聚集了很多优秀的软件开发者和IT技术学习者。

    2013年11月7日 8:03
  • 你好,

         你也可以按404状态码的方式去构建500状态码处理方式,但是需要建不同的*.aspx页面来处理和定义相应的状态码。

    if (ex != null && ex.GetHttpCode() == 500)
      {
        // Clear the error in order to avoid standard handling of the error.
        application.Server.ClearError();
        application.Context.Handler = 
              System.Web.UI.PageParser.GetCompiledPageInstance(fourOhFourPage, 
              application.Server.MapPath(fourOhFourPage), application.Context);
      } 
    

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place. <br/> Click <a href="http://support.microsoft.com/common/survey.aspx?showpage=1&scid=sw%3Ben%3B3559&theme=tech"> HERE</a> to participate the survey.


    2013年11月7日 8:11
    版主
  • To Happy Chen:

    so sorry,一时忘记标记答案了。


    博客园: dotNetDR_ 的博客 - 天杀下来的BUG,不怕有我来挡!

    博客园介绍: 博客园创立于2004年1月,是面向软件开发者的高品质IT技术社区,聚集了很多优秀的软件开发者和IT技术学习者。

    2013年11月12日 13:20