我有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仍然没有运气。
答案 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):
答案 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/