gpt4 book ai didi

ASP.NET Application_Error 被调用两次

转载 作者:行者123 更新时间:2023-12-03 07:45:05 25 4
gpt4 key购买 nike

我使用 Application_Error 来处理 ASP.NET MVC 3 应用程序中的错误。今天我注意到,对于一个特定的错误情况,此方法被调用了两次:请求带有前导下划线的资源时,例如_ViewStart.cshtml

Application_Error 的实现消耗了最后一个服务器错误:

var exception = server.GetLastError();
server.ClearError();
...

因此,第二次调用时,GetLastError 返回null。当它第一次被调用时,它会在响应对象上设置一个相应的状态码和内容。第二次调用导致所有这些设置被覆盖。为了解决这个问题,我现在检查空指针:

if (exception == null) return;

这样,它工作得非常好:该方法的第一次运行将响应替换为错误页面并设置状态代码。第二次运行什么都不做。然后将响应发送给获得正确状态码和错误页面的客户端。

但这行代码在我看来很脏。我更愿意了解正在发生的事情,而不是让错误处理程序静静地退出,而实际上一定是出了什么问题。

请注意:在第一次运行错误处理期间,似乎没有任何异常抛出。否则我能理解。但是当逐行调试时,整个 Application_Error 方法都会被处理,包括对 Controller 的 MVC 调用和 View 的呈现。事实上,在遵循 gordonml 的评论并检查“抛出 CLR 异常时中断”标志之后,Visual Studio 从未中断,甚至在第一次调用 Application_Error 之前也没有中断。

最佳答案

同样的事情发生在我身上。

我的解决方案如下(我不喜欢它,但我比 if(exception == null) return; 更喜欢它)

如果在对服务器的 AJAX 调用中抛出异常,我只是删除了 Response.StatusCode = (int)401

我在 Global.asax.cs 中有它,因为有时 API 访问 token 在 http session 之前过期。如果我设置 Response.StatusCode = 500,Application_Error 不会触发两次。

关于ASP.NET Application_Error 被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6652912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com