【问题标题】:Why is Response.End() not ending the request?为什么 Response.End() 没有结束请求?
【发布时间】:2016-03-07 02:09:32
【问题描述】:

我目前为我的 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 块中调用这个函数。这个 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,或者在标头已经发送后尝试设置标头等而产生第二个错误...

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

【问题讨论】:

    标签: c# .net asp.net-mvc-4 error-handling


    【解决方案1】:

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

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

    【讨论】:

    • 它不直接调用它。函数调用 Errors.Error.Response500() 调用 WriteErrorRepsonse() 方法,其中包含 Response.End() 函数调用。
    • 我也尝试在请求开始时直接从我的控制器调用Response.End(),但它并没有结束请求。在Response.End() 之后继续执行代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多