在web.config
中,错误页面设置为/errorpages/error.aspx
<httpErrors errorMode="Custom" existingResponse="Replace" >
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" path="/errorpages/error.aspx" responseMode="ExecuteURL" />
</httpErrors>
但是当浏览器中加载了页面/errorpages/error.aspx
时,状态代码为200.这会导致各种问题,例如当我有一个JS文件错误的URL时,而不是获得一个特定错误,我得到一个JS错误,如unexpected <
(404.aspx
页面使用相同的逻辑)。
所以,要解决这个问题,在error.aspx
内,Page_Load()
,我设置
Response.StatusCode = 500;
,页面返回500状态代码,可在浏览器中观察。
问题在于,如果我在Page_Load()
中的/errorpages/error.aspx
内放置一个断点,它会被击中两次。第一次进入StatusCode
200
时,它会将其设置为500
,所以我怀疑IIS是否尝试从web.config
处理它,它会再次加载页面。同样,StatusCode
为200
,并更改为500
,但这次不会触发另一次执行。
这可能是因为在Global.asax.cs中处理异常这一事实,在处理之后,执行此操作:
Server.TransferRequest("/errorpages/error.aspx?someExceptionInfo=" + exceptionInfo);
我可以设置状态代码而不是调用TransferRequest
,让IIS处理它,并通过Session传递异常信息。但我担心在某些时候它可能会导致某种重定向循环或生产服务器上的某些东西。
问题(其中一个):
Response.StatusCode = ***
?StatusCode
时,如何阻止我的应用程序重复执行页面?