这是一个奇怪的(无论如何对我来说)查询字符串问题。
我正在使用具有网络序列号验证功能的安装工具。基本上,安装将用户电子邮件和序列号传递到网页(或 MVC 的 Controller 方法),并采用查询字符串参数并神奇地验证安装。
其中一个参数是在查询字符串中传递的电子邮件地址。
我最近有一个用户使用“+”电子邮件地址来购买订阅。一切正常,直到他去安装产品并且必须通过验证屏幕。
在做了一些挖掘之后我发现,而不是接收 ‘joe+foo@gmail.com’
验证码接收 ‘joe foo@gmail.com’
当然,空格会破坏验证尝试,因为他的电子邮件地址现在是错误的。
我已经与安装工具公司(Advanced Installer,地球上最好的安装工具)谈过,他们声称(我相信他们)电子邮件发送正确。
所以这让我想知道如何让 asp.net mvc 查询字符串解析器为该特定参数做正确的事情并将带有“+”的字符串传递给 Controller 方法?
如果重要的话,它是 asp.net mvc 5。
感谢您提供的任何帮助。
更新
问题在于发送,而不是接收。加号最终未编码,因此当它被查询字符串解析器处理时,它会转换为空格=。
所以我正在寻找的是一种为该特定 URL(并且仅该 URL)自定义查询字符串解析器的方法。
修复的捷径是在电子邮件 arg 中用加号替换空格。很简单,但我讨厌我的代码中的那种 hackery;如果我需要它,我更愿意让它使用自定义的解析器,否则我可以以任何方式插入它。
您可以在 asp.net mvc 中自定义几乎所有其他内容,所以我想知道是否有办法以某种自定义方式执行查询字符串传递。
最佳答案
假设您从 javascript 调用 URL,而不是这样做:
url += "?email=" + email;
像这样编码值:
url += "?email=" + encodeURIComponent(email);
如果您从服务器调用 URL,则:
string encodedEmail = Server.UrlEncode(email);
更新
如果您无法更改调用 URL 的位置,那么您别无选择,只能:
HttpUtility.UrlEncode(Request.QueryString["email"]);
或:
email = email.Replace(' ', '+');
关于c# - asp.net mvc querystring解析将+替换为空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503369/