在控制器中生成<a>链接以发送电子邮件

ana*_*der 0 html hyperlink asp.net-mvc-routing asp.net-mvc-4 asp.net-core-2.0

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

http://www.example.com/Account/ResetPassword/184?t=BC2EveZtRl3wjbONboalzlUVwUpp%252BYaiKvbsZ6aPPYE%253D
Run Code Online (Sandbox Code Playgroud)

用户不愿意点击此链接,因为它很大且看起来很吓人; 他们认为这是一个恶意的第三方窃取他们的密码或给他们一个病毒或东西的伎俩.

如果这是一个视图,我会用它@Html.ActionLink()来生成一个漂亮的<a>链接,上面写着"点击这里重置你的密码",这很好.但是,在一个控制器中,我无法访问该方法,除非我实例化一个HtmlHelper需要ViewData的东西,这导致需要实例化的整个链条以伪造一些我不会使用的东西,并且我看到的每个地方都说这是不好的做法,我不应该这样做.

<a>在ASP.NET MVC中,在控制器代码中生成整洁链接的最简洁方法是什么?

von*_* v. 5

UrlHelper是通过控制器可用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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)