字符串中的URL被撇号损坏

时间:2015-09-15 09:14:53

标签: c# asp.net-mvc url

我一直在一个网站上工作,该网站必须发送一封带有网址的电子邮件,但是,网址上印有多余的&#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

2 个答案:

答案 0 :(得分:2)

有些东西似乎试图将&code解释为html转义序列,并添加分号以完成序列。

在将字符串添加到原始html之前,您必须转义该字符串,并将&更改为&amp;

答案 1 :(得分:0)

继C.Evenhuis回答之后,我改变了string.format:

string.Format(ConfirmEmailBody, FirstName, Email, callbackUrl)

为:

string.Format(ConfirmEmailBody, FirstName, Email, callbackUrl, callbackUrl.Replace("&","&amp;"))

callbackUrl的第一个实例用于<a href>标记,而第二个实例用于屏幕上的转储。它现在可以剪切并粘贴到浏览器中并且工作正常。这并没有回答我的问题,为什么网络浏览器这样做,但至少它让它工作。