gpt4 book ai didi

c# - 为什么 Response.End() 没有结束请求?

转载 作者:行者123 更新时间:2023-11-30 18:22:23 25 4
gpt4 key购买 nike

我目前为我的 MVC 4 项目设置了一个全局错误处理程序。我们还将此错误处理程序用于我们拥有的一些 Web 表单项目。在将错误记录到数据库并向适当的人发送错误电子邮件后,它调用此方法将我们的自定义错误页面发送给最终用户。

public static void WriteErrorResponse(string response)
{
//Cleanup and send response to user
HttpContext.Current.Server.ClearError();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "text/html";
HttpContext.Current.Response.Write(response);
HttpContext.Current.Response.End();
}

我遇到过一个实例,我们的标准错误消息不足以让我正确追踪我们网站之一的问题。所以我想将函数定义包装在 try catch 中,并在 catch block 内调用此函数。这个 catch 语句看起来像这样

catch (System.Data.SqlClient.SqlException ex)
{
string message = "<strong>Query Executed:</strong> <br>" + sql + "<br><br><br><strong>Query Variables:</strong><table><tbody>";
foreach(var rv in rvs)
{
message += "<tr><th>" + rv.VariableName + "</th><td>" + variables[rv.VariableName] + "</td></tr>";
}
message += "</tbody></table>";
Errors.Error.EmailError(message, ex);
Errors.Error.LogError(message, ex);
Errors.Error.Respond500();
return null;
}

Errors.Error.Respond500() 构建响应字符串,然后调用上面显示的 WriteErrorResponse(string) 方法。

所有这一切都有效,错误消息显示给用户,我得到更详细的错误消息。问题是请求继续执行并且由于将变量设置为 null 或尝试在 header 已发送后设置 header 等而生成第二个错误...

所以现在我留下了一个问题,为什么 Response.End() 没有像文档所说的那样结束请求。还有一个解决方案不涉及我重新抛出错误(在这种情况下发送了 2 封电子邮件,这很烦人!)

最佳答案

catch block 不调用 Response.End()。一旦 try{} 中的某些内容抛出异常,该 try{} 代码的其余部分将不会执行,因此永远不会到达 End。

尝试执行 try{} - catch(ex){} - finally{},并在 finally{} 中调用 Response.End(),无论是否捕获到异常都会被调用。

关于c# - 为什么 Response.End() 没有结束请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34049444/

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