【问题标题】:ThreadAbort on Using ASP.NET Identity Model使用 ASP.NET 标识模型的 ThreadAbort
【发布时间】:2014-03-26 03:39:21
【问题描述】:

除了 ASP.NET,我一直关注 this post on email confirmation。以下代码导致

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("foo@foo.net", to, username, confirmationToken + Environment.NewLine + "http://blah.com/Activate.aspx?confirmationCode= " + confirmationToken);
        }

有人知道为什么吗?

【问题讨论】:

    标签: c# asp.net asynchronous threadabortexception


    【解决方案1】:

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

    重定向调用 End 在完成时抛出 ThreadAbortException 异常。

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

    根据您的其他处理,您也可以

    • false 指定为其他Redirect 覆盖的第二个参数
    • 在那段代码中忽略/不记录ThreadAbortException
    • 重新设计代码以进行不同的重定向。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 2014-04-10
      • 1970-01-01
      • 2019-08-07
      • 2020-07-17
      • 1970-01-01
      • 2013-07-12
      相关资源
      最近更新 更多