我一直在一个网站上工作,该网站必须发送一封带有网址的电子邮件,但是,网址上印有多余的&#39 ;;'在里面。 例如:
为了让我们继续处理您的请求,请点击here确认您的电子邮件地址或将以下链接粘贴到您的浏览器中: http://localhost/Account/ConfirmEmail?userId=605fa142&code;=7fBi8oRavW6C
上面网址的第二个实例不应该包含&#39;;&#39;在&#39;代码&#39;之后参数。您会注意到<a href>here</a>
中的网址没有额外的撇号。
我已经尝试过使用IE和Chrome,并获得相同的结果。我怀疑浏览器正在放入撇号,但我不知道为什么。
电子邮件文本是从资源文件中提取的:
<p>Dear {0}<p></BR><p>Thank you for signing up to access the Extranet with the email address {1}.</p><p>In order for us to continue with your request, please click <a href="{2}">here</a> to confirm your email address or paste the following link in to your browser:</BR><a href="{2}">{2}</a>
并使用string.format()
填充详细信息:
string.Format(ConfirmEmailBody, firstName, email, callbackUrl)
在过去的几个小时里,我一直在努力解决这个问题,我唯一能想到的是序列&code=
具有某种意义。有没有其他人见过这个?
编辑1
使用以下代码生成callbackUrl:
var callbackUrl = Url.Action("ConfirmEmail", "Account",
new { userId = userID, code = code }, protocol: Request.Url.Scheme);
我在创建callbackUrl之后在VS中设置了一个断点,并且生成的url 不包含包含撇号。
编辑2
似乎&#39;代码&#39;没有任何意义。我更改了URL参数,浏览器为每个参数打印带有多余撇号的字符串:
localhost/Account/ConfirmEmail?userId=80216107-1d0e-432c-88cc-69f18be2111e&foo;=wibble&bar;=wobble
答案 0 :(得分:2)
有些东西似乎试图将&code
解释为html转义序列,并添加分号以完成序列。
在将字符串添加到原始html之前,您必须转义该字符串,并将&
更改为&
。
答案 1 :(得分:0)
继C.Evenhuis回答之后,我改变了string.format:
string.Format(ConfirmEmailBody, FirstName, Email, callbackUrl)
为:
string.Format(ConfirmEmailBody, FirstName, Email, callbackUrl, callbackUrl.Replace("&","&"))
callbackUrl的第一个实例用于<a href>
标记,而第二个实例用于屏幕上的转储。它现在可以剪切并粘贴到浏览器中并且工作正常。这并没有回答我的问题,为什么网络浏览器这样做,但至少它让它工作。