2014-03-25 130 views
0

我除了ASP.NET以外,还使用this post on email confirmation。下面的代码是造成使用ASP.NET标识模型的ThreadAbort

Exception Details: System.Threading.ThreadAbortException: Thread was being aborted. 

页面标记异步:

<%@ Page Title="Register" Async="true" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Register.aspx.cs" Inherits="AlphaFrontEndSiteASP.Account.Register" %> 

的代码是:

public partial class Register : Page 
    { 
     protected async void CreateUser_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       string confirmationToken = CreateConfirmationToken(); 
       var user = new ApplicationUser 
       { 
        UserName = UserName.Text, 
        CompanyName = CompanyName.Text, 
        emailAddress = emailAddress.Text, 
        FirstName = FirstName.Text, 
        LastName = LastName.Text, 
        ConfirmationToken = confirmationToken, 
        IsConfirmed = false 
       }; 

       var manager = new UserManager(); 
       var result = await manager.CreateAsync(user, Password.Text); 
       if (result.Succeeded) 
       { 
        SendEmailConfirmation(emailAddress.Text, UserName.Text, confirmationToken); 
       } 
       Response.Redirect("~/Default.aspx"); 
      } 
      catch (Exception ex) 
      { 
       common c = new common(); 
       c.LogError(ex.Message, "Register.aspx.cs" + " - " + this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name); 
      } 

private string CreateConfirmationToken() 
     { 
      return Guid.NewGuid().ToString(); 
     } 

     private void SendEmailConfirmation(string to, string username, string confirmationToken) 
     { 
      common c = new common(); 
      c.SendMail("[email protected]", to, username, confirmationToken + Environment.NewLine + "http://blah.com/Activate.aspx?confirmationCode= " + confirmationToken); 
     } 

没有人有任何想法,为什么?

回答

2

通过设计 - Response.Redirect停止通过中止线程请求处理:

重定向呼叫结束这完成时引发一个ThreadAbortException异常。

.... 
    Response.Redirect("~/Default.aspx"); 
} 
catch (Exception ex) 

根据您其他处理既可以

  • 指定false其他Redirect倍率
  • 忽略/在于一段代码
  • 重新设计代码没有日志ThreadAbortException的第二个参数做不同的重定向。

注意:如果使用ASP.Net MVC,它的Controller.Redirect不会引发异常。