在 中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>
Run Code Online (Sandbox Code Playgroud)
但是当页面/errorpages/error.aspx
在浏览器中加载时,状态代码为 200。这会导致各种问题,例如当我有一个位于错误 URL 中的 JS 文件时,我不会得到特定的错误,而是得到 JS 错误就像unexpected <
(页面使用相同的逻辑404.aspx
)。
所以,为了解决这个问题,在里面error.aspx
,在Page_Load()
,我设置
Response.StatusCode = 500;
Run Code Online (Sandbox Code Playgroud)
页面返回500状态码,可以在浏览器中观察到。
问题是,如果我在 中放置一个断点Page_Load()
,/errorpages/error.aspx
它就会被击中两次。第一次进入StatusCode
is时200
,它会将其设置为500
,所以我怀疑 IIS 会尝试处理 from web.config
,它会再次加载页面。再次StatusCode
是200
,并且更改为500
,但这一次它不会触发另一次执行。
这可能是由于 Global.asax.cs 中正在处理异常,处理后执行:
Server.TransferRequest("/errorpages/error.aspx?someExceptionInfo=" + exceptionInfo);
Run Code Online (Sandbox Code Playgroud)
我可以只设置一个状态代码而不是调用TransferRequest
,并让 IIS 处理它,并通过 Session 传递异常信息。但我担心在某些时候它可能会导致某种重定向循环或生产服务器上的某些情况。
问题(其中之一):
Response.StatusCode = ***
?StatusCode
?