【问题标题】:Try catch not working properly尝试 catch 无法正常工作
【发布时间】:2013-05-03 14:33:57
【问题描述】:

我正在尝试向数据库中插入一个新成员, 当有重复时,catch 块可以正常工作。 但是当有一个新成员时,try 和 catch 块 返回他们的消息。这是我的代码。

if (Request["cmd"] == "ins")
{
    try{
        mydb db = new mydb();
        member newm = new member()
        {
            Id = Request["uid"],
            Name = Request["uname"]
        };

        db.AddTomembers(newm);
        db.SaveChanges();
        Response.Write("ok");
        Response.End();
    }
    catch(Exception s) {
        Response.Write(s);
        Response.End();
    }
}

【问题讨论】:

  • “回复他们的信息”是什么意思?请注意,如果您修复缩进,您的代码将更更易于遵循。
  • 异常发生在哪一行?
  • 不可能同时触发完整的尝试和捕获......
  • 完成后的响应是什么样的?
  • Response.End 可能会抛出你的异常

标签: c# asp.net linq entity-framework try-catch


【解决方案1】:

问题并不太清楚,但我强烈怀疑问题在于Response.End() 抛出异常 (ThreadAbortException),如记录所示:

为了模仿 ASP 中 End 方法的行为,该方法尝试引发 [ThreadAbortException] 异常。如果此尝试成功,调用线程将被中止,这对您站点的性能不利。在这种情况下,调用 End 方法后不会执行任何代码。

您正在捕获该异常,然后再次调用它。只需将 Response.End 移动到 finally 块 - 或者理想情况下,完全摆脱它,构建你的控制流,这样你就不需要它......再次,如文档所述:

提供此方法只是为了与 ASP 兼容,即与 ASP.NET 之前基于 COM 的 Web 编程技术兼容。如果您想跳转到 EndRequest 事件并向客户端发送响应,通常最好调用 CompleteRequest。

(请注意,如果您捕获了一个特定异常而不仅仅是Exception,那么您也不会遇到这个问题。

【讨论】:

  • @Andomar:不,你可以捕捉到它——但它会在 catch 块的末尾自动重新抛出,除非你明确禁止这种行为。
  • 当我尝试将副本插入数据库并且它正常工作时会发生异常。但是如果我删除 Response.End() ,我会将其余的 html 发送给客户端。我只是想发送一个简单的消息说它成功与否。
  • @NarekMinaskan:什么是“HTML 的其余部分”?你在这里没有给我们足够的背景信息。为什么您需要发送额外的 HTML?听起来您可能应该为此重新考虑您的设计。
  • 不,我的意思是,如果我不使用 response.end(),它会发送我页面的 html,当我提醒来自服务器的数据时它是可见的
  • @NarekMinaskan:我的观点是,如果您可以采用更类似于 MVC 的方法,您生成的响应由早期结果控制,那会更好。无论如何,只是将Response.End() 移动到 catch 块之后(并且只有一次调用它)现在应该是一种老套的方式。
【解决方案2】:

如果ok 和异常消息s 都被写入,则抛出异常的是 Response.End()。检查 s 以了解发生了什么。

猜测:Is Response.End() considered harmful?

【讨论】:

    【解决方案3】:

    如果您尝试在 asp.net 的 Page_Load 事件上调用 Response.End(),它将无法正常工作。看看这个线程:Response.End () doesn't abort current thread,看看如何解决它。

    尽量避免在 asp.net 应用程序上出现响应,尝试显示面板,使用标签显示消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 2017-09-11
      相关资源
      最近更新 更多