【问题标题】:Response is not available in this context. Response.Write(ex.ToString());在这种情况下没有响应。 Response.Write(ex.ToString());
【发布时间】:2011-03-25 05:49:37
【问题描述】:

我在 global.asax 中按照经典代码编写了这段代码。每次我启动网站时,它都会显示此错误。刷新页面后,它进入正确的页面。我不明白为什么。

响应在此不可用 语境。描述:一个未处理的 期间发生异常 执行当前的 Web 请求。 请查看堆栈跟踪以获取更多信息 有关错误和位置的信息 它起源于代码。

异常详情: System.Web.HttpException:响应是 在这种情况下不可用。

来源错误:

Line 26:         catch (Exception ex)
Line 27:         {
Line 28:             Response.Write(ex.ToString());
Line 29:         }
Line 30: 

void Application_Start(object sender, EventArgs e) 
{
    try
    {
        if (Roles.RoleExists("Administrators") == false)
            Roles.CreateRole("Administrators");
        if (Membership.FindUsersByName("ken").Count == 0)
        {
            Membership.CreateUser("ken", "123", "ken@jobpost.com");
            Roles.AddUserToRole("ken", "Administrators");
        }
        if (Membership.FindUsersByName("dan").Count == 0)
            Membership.CreateUser("dan", "123", "dan@jobpost.com");


    }
    catch (Exception ex)
    {
        Response.Write(ex.ToString());
    }

}

脚本>

【问题讨论】:

  • 我想知道 catch 捕获的是什么异常?
  • 你提到的代码是哪一个事件?

标签: c# asp.net global-asax


【解决方案1】:

Application_Start 仅在 IIS 启动应用程序时执行一次。问题的真正原因在于 try 块内的代码,您可以使用日志框架或通过在 catch 块内设置断点来诊断。

您不能在 catch 块中使用 Response.Write,因为没有与 Application_Start 关联的请求(或响应)。这样做会触发一个新的异常,从而隐藏问题的原始原因。查看ASP.NET Application Lifecycle了解更多详情。

【讨论】:

  • 该死,我几乎回答完了,但你的速度更快;)
  • @citronas 这发生在我们所有人身上:-)
【解决方案2】:

我相信您的应用程序启动代码中很可能存在一些问题,导致出现异常,导致您捕获块。由于某种原因,响应对象不可用,因此您会得到一个未处理的异常。因为应用程序已经启动,代码路径不会再次被访问,并且您在后续请求中看不到错误。

我建议您将异常记录在一个文件中,而不是发出它来响应检查原始异常详细信息,这些详细信息将掩盖实际问题以及为什么响应不可用。您可以使用 System.Diagnostic.Trace 和跟踪侦听器进行日志记录(或者您可以使用 Log4Net 或 MS Logging App Block 等库)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 2021-10-30
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多