尝试捕捉不正常

时间:2013-05-03 14:33:57

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

我正在尝试将新成员插入数据库, 如果有重复,catch块工作正常。 但是当有一个新成员trycatch时 返回他们的消息。这是我的代码。

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();
    }
}

3 个答案:

答案 0 :(得分:6)

问题并不是很清楚,但我强烈怀疑问题是Response.End()引发了异常(ThreadAbortException),如下所示:

  

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

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

  

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

(请注意,如果您发现特定的例外而不仅仅是Exception,那么您也不会遇到此问题。)

答案 1 :(得分:1)

如果同时写入了ok和异常消息s,那么它就是抛出异常的Response.End()。检查s以了解发生了什么。

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

答案 2 :(得分:0)

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

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