【问题标题】:Generate <a> link in controller to send in email在控制器中生成 <a> 链接以通过电子邮件发送
【发布时间】:2013-04-19 11:41:05
【问题描述】:

我正在实施一个密码重置系统,虽然代码运行良好,但有一个小问题......与用户有关。该系统通过生成通过电子邮件发送的一次性加密安全令牌来工作。问题是要使用这些令牌,用户必须点击他们收到的电子邮件中的链接。这本身不是问题,但有问题的链接看起来像这样:

http://www.example.com/Account/ResetPassword/184?t=BC2EveZtRl3wjbONboalzlUVwUpp%252BYaiKvbsZ6aPPYE%253D

用户不愿意点击这个链接,因为它又大又吓人;他们认为这是一些恶意第三方窃取他们的密码或给他们病毒或其他东西的伎俩。

如果这是一个视图,我会使用@Html.ActionLink() 生成一个漂亮的&lt;a&gt; 链接,上面写着“单击此处重置您的密码”,这很好。然而,在控制器中,我无法访问该方法,除非我实例化一个HtmlHelper,这需要ViewData,这会导致需要实例化的一整串事情来伪造我赢得的一些东西'无论如何都不要使用,而且我看过的所有地方都说这是不好的做法,我不应该这样做。

在控制器代码、ASP.NET MVC 中生成整洁的&lt;a&gt; 链接的最简洁方法是什么?

【问题讨论】:

    标签: html asp.net-mvc-4 hyperlink asp.net-core-2.0 asp.net-mvc-routing


    【解决方案1】:

    UrlHelper 可以通过Url 属性在控制器中使用,它可以做同样的事情,那就是为您构建一个 url。因此,您可以为您的电子邮件发件人提供包含链接的文本,这就是您构建该部分电子邮件的方式:

    var link = "<a href='http://www.mysite.com/" 
        + @Url.Action("ResetPassword","Account", new{id=184, t=token}) 
        +"'>Click here to reset your password</a>"
    // where token is your single-use crypto-secure
    

    如果您希望域是动态的,那么您可以将其更改为:

    var link = "<a href='" 
        + Request.Url.Scheme + "://"
        + Request.Url.Authority
        + @Url.Action("ResetPassword","Account", new{id=184, t=token}) 
        +"'>Click here to reset your password</a>"
    // where token is your single-use crypto-secure
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 Asp.NET Core 2.0 或更高版本,则可以使用Url.Page() 方法生成链接。

      var link = Url.Page("/Account/ResetPassword", new{id=184, t=token}, Request.Scheme);
      

      【讨论】:

        猜你喜欢
        • 2016-04-08
        • 2014-07-01
        • 2020-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-06
        相关资源
        最近更新 更多