在Console应用程序中使用Web应用程序方法

时间:2016-05-30 10:08:47

标签: c# .net console-application system.net.mail

我一直在遵循本指南http://www.aspsnippets.com/Articles/Send-user-Confirmation-email-after-Registration-with-Activation-Link-in-ASPNet.aspx来创建一个在注册表上发送验证电子邮件的系统,我似乎偶然发现了一个小问题,因为该指南适用于Web应用程序,我需要修改它以用于控制台应用,

这段代码适用于Web应用程序,但我正在尝试将其更改为适合控制台应用程序。

body += "<br /><a href = '" +Request.Url.AbsoluteUri.Replace("CS.aspx", "CS_Activation.aspx?ActivationCode=" + activationCode) + "'>Click here to activate your account.</a>";

尝试阅读有关WebClient或Uri选项但我似乎无法弄清楚如何获取绝对Uri并添加所需的字符串以从控制台应用程序生成激活链接。

如果需要,将添加更多代码。

尝试遵循此SO How to build a Url?,但我似乎无法使其正常工作。

激活代码生成并将其保存在DB上。

private static void SendActivationEmail(string email, string userName, MySqlConnection mysqlCon)
    {

        string activationCode = Guid.NewGuid().ToString();
        using (mysqlCon)
        {
            using (MySqlCommand cmd = new MySqlCommand("UPDATE accounts SET ActivationCode=@ActivationCode " +
                                                       "WHERE Username=@Username;"))
            {
                using (MySqlDataAdapter sda = new MySqlDataAdapter())
                {
                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("@Username", userName);
                    cmd.Parameters.AddWithValue("@ActivationCode", activationCode);
                    cmd.ExecuteNonQuery();
                    mysqlCon.Close();
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

您是否正在构建一个具有用户注册特定服务的控制台应用程序?我真的没有得到你想要做的事情。

如果您有控制台应用程序,则不存在Request,因此肯定没有Request.Url。因此,您需要另一种方法来查找或构建要在外发电子邮件中嵌入的URL。

答案 1 :(得分:0)

在ASP.NET中,您的应用程序是托管的,并且始终具有Url,另一方面,在控制台应用程序中,您必须手动设置它。

扩展Roy Dictus评论:

也许最好在应用程序配置中添加一个参数,将其命名为MyWebActivationBaseUrl并将值设置为“http://myserver.com/Activate.aspx?ac=”。

然后用它来构建个人激活网址。