Request.Url.Authority不会返回预期的域名

时间:2013-04-17 12:27:48

标签: asp.net

我正在我网站的控制器中生成一封电子邮件,其中包含指向我网站的链接:

"http://" & Request.Url.Authority & "/some-page"

当我在本地计算机上测试它(返回localhost:12345)并在生产中(返回www.company.com)时,这是有效的,但是有一个人得到了这个结果:

http://www.company..com/some-page

正如您所看到的,域名中有2 ..。我无法重现这个错误,这怎么可能?

编辑:更多信息

  • 我发送的电子邮件类型是纯文本电子邮件(无HTML或RTF)
  • 当发出有问题的请求时,网络服务器日志会将www.company.com显示为域
  • 我只收到了电子邮件的部分截图。我认为电子邮件客户端是Outlook,但我认为Outlook没有理由误解链接。
  • 此人(或恶意软件)当然可能已编辑此电子邮件的内容。

3 个答案:

答案 0 :(得分:2)

我应该通过一个简单的例子尽快尝试这个:

Module Module1
    Sub Main()
        Dim SomeAddress As New Uri("http://www.example..com/test")

        Console.WriteLine(SomeAddress.Authority)
    End Sub
End Module

这将在构造函数中抛出异常:

  

System.UriFormatException - 无效的URI:主机名不能   解析

因此,客户无法在未经编辑的情况下从我的代码收到此类电子邮件。

答案 1 :(得分:2)

这实际上是电子邮件编码方式的问题,请参阅以下答案:https://stackoverflow.com/a/6603002/186288。总之,您应该将编码更改为UTF8以强制执行电子邮件的base-64编码,否则某些电子邮件客户端可能会错误解释默认的Content-Transfer-Encoding:Quoted-Printable;编码并在恰好碰到包装点的URL中添加额外的“。”。

为此,请在发送电子邮件之前添加此行:

mail.BodyEncoding = System.Text.Encoding.UTF8;

答案 2 :(得分:1)

您为什么使用Request.Url.Authority?我建议你不要使用它,并使用Request.Url.Host。最好使用Request.Url.Host或Uri类构造函数,当构造不正确的URI时,它会抛出异常,你可以记录它或显示错误。

无论如何,很难预测一个用户为什么会有www.company..com无论如何,使用Request.Url.Authority级联的代码无法生成它。所以也许错误在其他地方。