我有 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 状态代码来配置负载均衡器以关闭配置错误的服务器。
更新
我已将自定义错误设置为 Off,以便将正确的状态代码发送到 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>
将 httpError 部分配置为 ExecuteURL,但仍会在本地和远程显示完整的异常详细信息。当我添加 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 仍然没有运气。