如何在ASP.NET中加载配置文件时发生异常时为错误页面响应设置状态代码500

时间:2013-04-24 08:32:41

标签: asp.net iis episerver

我有EPiServer应用程序,当加载某些配置或EPiServer初始化管道中发生异常时,有时可能会在应用程序启动时抛出异常。我已将customErrors配置为重定向到/Error.htm页面,我正在global.asax中的Application_EndRequest事件中处理此页面的响应状态代码,以返回正确的状态代码,如下所示:

    protected void Application_EndRequest(object sender, EventArgs e)
    {
        if (Request.Url.AbsolutePath.EndsWith("Error.htm"))
        {
            Response.StatusCode = 500;
            Response.TrySkipIisCustomErrors = true;
        }
    }

在加载应用程序时发生异常时效果很好,但在加载配置文件(在我的情况下为episerver.config)或EPiServer初始化管道中发生异常时(EPiServer中存在一个错误)则不行。

试图创建IHttpModule,但它没有初始化。试图在Application_Error中添加错误处理,但它也没有被触发。

ASP.NET似乎正在处理这些异常,因为它正确地重定向到我的Error.htm页面,但是它设置了状态代码304.而且我找不到进入管道来改变状态代码的方法。

我需要500个错误页面状态代码来配置负载均衡器以取消配置错误的服务器。

更新

我已将自定义错误设置为关闭,以便将正确的状态代码发送到IIS:

<customErrors mode="Off" defaultRedirect="/Error.htm"></customErrors>

配置httpError部分以重定向到Error.htm,但是本地和远程显示完整的异常详细信息。当我添加existingResponse =“Replace”时,由于重定向循环,它会抛出异常:

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="500" subStatusCode="-1" />
  <error statusCode="500" prefixLanguageFilePath="" path="Error.htm" responseMode="Redirect" />
</httpErrors>

为ExecuteURL配置了httpError部分,但仍在本地和远程显示完整的异常详细信息。当我添加existingResponse =“Replace”时,它仍然在本地和远程显示完整的异常详细信息:

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="500" subStatusCode="-1" />
  <error statusCode="500" prefixLanguageFilePath="" path="/Error.htm" responseMode="ExecuteURL" />
</httpErrors>

如果我设置responseMode =“File”和existingResponse =“Replace”,它会在本地和远程显示Error.htm:

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="500" subStatusCode="-1" />
  <error statusCode="500" prefixLanguageFilePath="" path="Error.htm" responseMode="File" />
</httpErrors>

在本地获取错误详细信息并远程获取Error.htm仍然没有运气。

3 个答案:

答案 0 :(得分:1)

在EPiServer 7及更高版本中,您可以使用globalErrorHandling来设置预期的行为。

要通过httpErrors / customErrors完成错误处理,您可以将参数设置为Off

<episerver>
  <applicationSettings globalErrorHandling="Off" />
</episerver>

可能的值为"RemoteOnly|On|Off",如下所示:http://world.episerver.com/documentation/Items/Developers-Guide/Episerver-CMS/8/Configuration/Configuring-episerver/

您也可以在后台访问此参数(将在保存时编辑您的web.config):

enter image description here

答案 1 :(得分:0)

您可以查看 <httpErrors> 而不是 <customErrors>

http://tedgustaf.com/blog/2011/5/custom-404-and-error-pages-for-asp-net-and-static-files/的一些信息。

答案 2 :(得分:0)

您可能需要禁用EPiServer错误处理。您可以通过打开episerver.config并将“”元素的“globalErrorHandling”属性设置为“Off”来实现。

启用globalErrorHandling后,我的customErrors和httpErrors设置将无法按预期工作。

部分答案是从这个地址复制而来的:http://www.eyecatch.no/blog/2011/09/custom-error-pages-in-episerver/