2014-03-25 1 views
0

ASP.NET을 제외하고는 this post on email confirmation을 따라갔습니다. 다음 코드는ASP.NET Identity Model을 사용하는 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) 

당신도

  • 하는
  • 무시 다른 Redirect 재정/코드
  • 재 설계 코드의 조각에 어떤 로그 ThreadAbortException의 두 번째 인수로 false을 지정할 수 있습니다 처리 다른 사용자에 따라 다르게 리디렉션 할 수 있습니다.

참고 : ASP.Net MVC를 사용하는 경우 Controller.Redirect은 예외를 발생시키지 않습니다.