ThreadAbortException, Response.End, Response.Redirect veya Server.Transfer kullanırsanız oluşur

Bu makale , Response.Redirectveya Server.Transferkullanırsanız Response.Endoluşan ThreadAbortException hatasını çözmenize yardımcı olur.

Özgün ürün sürümü: .NET Framework 4.5.2'de ASP.NET, .NET Framework 3.5 Service Pack 1'de ASP.NET
Özgün KB numarası: 312629

Belirtiler

, , Response.Redirectveya Server.Transfer yöntemini kullanırsanız Response.EndThreadAbortException özel durumu oluşur. Bu özel durumu yakalamak için deyimini try-catch kullanabilirsiniz.

Neden

yöntemi, Response.End sayfa yürütmeyi sonlandırır ve yürütmeyi uygulamanın olay işlem hattındaki Application_EndRequest olayına kaydırıyor. Aşağıdaki kod Response.End satırı yürütülmedi.

Bu sorun, ve Server.Transfer yöntemlerinde Response.Redirect oluşur çünkü her iki yöntem de Response.End'i dahili olarak çağırır.

Çözüm

Bu sorunu geçici olarak çözmek için aşağıdaki yöntemlerden birini kullanın:

  • için Response.End , kod yürütmesini HttpContext.Current.ApplicationInstance.CompleteRequest olaya atlamak yerine Response.End yöntemini çağırın Application_EndRequest .

  • için Response.Redirect, öğesine yapılan iç çağrıyı engellemek için endResponse parametresi için false geçiren response.Redirect(Dize url'si, bool endResponse) aşırı yüklemesini Response.Endkullanın. Örneğin:

     Response.Redirect ("nextpage.aspx", false);
    

    Bu geçici çözümü kullanırsanız, aşağıdaki Response.Redirect kod yürütülür.

  • için Server.Transferyöntemini kullanın Server.Execute .

ASP.NET bu özel durumu işlese de, bu özel durumu yakalamak için deyimini try-catch kullanabilirsiniz. Örneğin:

try
{
    Response.Redirect("nextpage.aspx");
}
catch (Exception ex)
{
    Response.Write (ex.Message);
}

Satıra Response.Write bir kesme noktası ekleyin ve bu kesme noktasına isabet olduğuna dikkat edin. Özel durumu incelediğinizde ThreadAbortException özel durumunun oluştuğuna dikkat edin.