【问题标题】:Generating absolute urls from Html.RouteLink从 Html.RouteLink 生成绝对 url
【发布时间】:2011-05-22 10:18:27
【问题描述】:

我正在使用@Html.RouteLink("Validate", "ValidateEmail", new { email = Model.Email, key = Model.Key }) 生成一个链接,我通过电子邮件发送给新注册的用户。当我尝试这个时,我发现,哇,它并没有生成绝对网址……这意味着我得到了一个像<a href="/Membership/Validate/email.to%40you.com?key=someKey">Validate</a> 这样的链接。但是,当我在电子邮件中发送此链接时,它(原因)将不起作用,那么我该如何改进呢?有什么简单的解决方案?

【问题讨论】:

  • 我也为此苦苦挣扎,最终为此目的在我的 web.config 文件中添加了一个“BaseUrl”应用程序设置(在我的情况下是提要,不是电子邮件......但同样的问题)。我有兴趣看看人们想出了什么。这是一个棘手的问题,因为服务器和应用程序可能并不真正知道(至少不可靠)正在使用什么 URL 来查询它们
  • 顺便说一句,从 razor-templates 生成电子邮件并不好玩:-P

标签: asp.net-mvc routes html-helper asp.net-mvc-3


【解决方案1】:

您可以使用以下overload

@Html.RouteLink(
    "click me", 
    "Default", 
    "http", 
    null, 
    null, 
    new { 
        email = Model.Email, 
        key = Model.Key, 
        controller = "Home", 
        action = "Index" 
    }, 
    null)

DefaultGlobal.asax 中定义的路由名称,http 是协议(如果您愿意,可以是https,或者简单地使用Request.Url.Scheme 来获取包含页面协议并避免丑陋的硬编码) ,然后是一个包含路由值的匿名对象,这几乎就是全部 -> 你将获得一个绝对 url。

顺便说一句,所有 url 生成助手都有重载,它们采用协议和主机名:将它们用于绝对 url。

【讨论】:

  • @Alxandr,不客气,如果回答有帮助别忘了采纳。
  • 我知道。我就像向“应答按钮”发送垃圾邮件一样,但它说要等待 3 分钟:-P
  • 顺便说一句,您可以删除控制器 = "Home" 和 action = "Index"。他们会(至少在我的情况下)使事情无法正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 2019-02-11
  • 2017-12-10
相关资源
最近更新 更多