浏览器将编码的斜杠(%2F)转换为URL的路径部分中的文字斜杠(/)

时间:2017-01-02 14:02:58

标签: c# urlencode

我目前正在使用 ASP.NET身份注册后使用电子邮件确认。

此库提供完成注册所需的令牌生成。此令牌在我们的应用程序中用于以下路径:

https://localhost/#/account/{token}/setup

通过调用:

生成令牌
var emailToken = _userManager.GenerateEmailConfirmationToken(newUser.Id);

生成令牌后,我会以string.Format这种方式将其添加到路径中:

string.Format("https://localhost/#/account/{0}/setup", HttpUtility.UrlEncode(emailToken));

结果如下:

  

https://localhost/#/account/AQAAANCMnd8BFdERjHoAwE%2fCl%2bsBAAAA6gbQhGTTMUWVHDgOwC9T9AAAAAACAAAAAAAQZgAAAAEAACAAAAAqo%2fiAv8iIn7Zox9pS3MOUMVNisAo7Bnada6%2f9wKEe6wAAAAAOgAAAAAIAACAAAABUu7WkD9vHvN2EDz2%2bqGwvJ4j6gj%2f4PaBTbI861jfEcWAAAADJV74LZjKAXv5v1FqYVuWLyTpPBCnLfopSi3rsEEwMHFKwltHL3moL2h%2fvYVs%2fu3LB%2br5Qytuu%2fZYOUWQTY5KzBqHeZoi7RJ02emDI0NTRhIKxfSGGIdbYxuAjsW14G0BAAAAACsC8L%2bdUDzFMgKUOkxWhKofAz8L0mH5VFEt8Oq%2fKYsxIiu4fiA2sGlPfDhhKQnV2lg%2ba8qHydUjqmyfxNex0Pg%3d%3d/setup

但是当我在浏览器中打开这个网址时,我得到了:

enter image description here  ......等等!

我看到的是,网址在电子邮件正文中正确编码,但是当我在浏览器中打开它时,通过替换编码的"%2f" 进行解码到" /" 。这导致我的应用程序中的路由无效,因为我希望" /"成为不同资源之间的分隔符。

对这种行为的任何想法?

参考文献:

Another guy with my problem too

1 个答案:

答案 0 :(得分:3)

它可能正在解码它,因为它认为它是路径的一部分。

我建议您明确将其视为参数。这将告诉浏览器不要解码它。例如,而不是这条路径:

https://localhost/#/account/AQAAANCMnd8BFdERjHoAwE%2fCl%2bsBAAAA6gbQh ..........

使用此路径:

https://localhost/#/account/?t=AQAAANCMnd8BFdERjHoAwE%2fCl%2bsBAAAA6gbQh ......

请注意在帐户路径结束后添加?t=

然后在应用程序中使用t参数。这将告诉浏览器最终的值不会被解码为路径的一部分,而是以编码形式保存,因为它是一个参数。

这显然会改变你的路径(因为设置部分),所以要相应调整。