asp.net mvc查询字符串解析用空格替换+

Dou*_*ard 2 c# asp.net email asp.net-mvc asp.net-mvc-5

这是一个奇怪的(无论如何对我来说)查询字符串问题。

\n\n

我正在使用具有网络序列号验证功能的安装工具。基本上,安装会将用户的电子邮件和序列号传递到网页(或 MVC 的控制器方法),并采用查询字符串参数并神奇地验证安装。

\n\n

参数之一是查询字符串中传递的电子邮件地址。

\n\n

我最近有一位用户使用 \xe2\x80\x98+\xe2\x80\x99 电子邮件地址来购买订阅。一切都很顺利,直到他去安装产品并必须通过验证屏幕。

\n\n

经过一番挖掘后,我发现而不是接收 \n \xe2\x80\x98joe+foo@gmail.com\xe2\x80\x99

\n\n

验证码接收 \n \xe2\x80\x98joe foo@gmail.com\xe2\x80\x99

\n\n

当然,这个空格会破坏验证尝试,因为他的电子邮件地址现在是错误的。

\n\n

我已经与安装工具公司(高级安装程序,地球上最好的安装工具)交谈过,他们声称(并且我相信他们)电子邮件已正确发送。

\n\n

那么这让我如何让 asp.net mvc 查询字符串解析器为该特定参数做正确的事情并将带有“+”的字符串传递给控制器​​方法?

\n\n

如果重要的话,那就是 asp.net mvc 5。

\n\n

感谢您提供的任何帮助。

\n\n

更新

\n\n

问题在于发送,而不是接收。加号最终未编码,因此当查询字符串解析器处理它时,它会转换为空格=。

\n\n

因此,我正在寻找一种为该特定 URL(并且仅该 URL)自定义查询字符串解析器的方法。

\n\n

修复的快捷方式是在电子邮件参数中用加号替换空格。很简单,但我讨厌代码中的这种黑客行为,如果我需要它,我更愿意让它使用自定义的解析器,而我可以以任何方式插入它。

\n\n

您可以自定义 asp.net mvc 中的几乎所有其他内容,因此我想知道是否有一种方法可以以某种自定义方式进行查询字符串解析。

\n

Die*_*ego 6

假设您从 javascript 调用 URL,而不是这样做:

url += "?email=" + email;
Run Code Online (Sandbox Code Playgroud)

像这样对值进行编码:

url += "?email=" + encodeURIComponent(email);
Run Code Online (Sandbox Code Playgroud)

如果您从服务器调用 URL,则:

string encodedEmail = Server.UrlEncode(email);
Run Code Online (Sandbox Code Playgroud)

更新

如果您无法更改调用 URL 的位置,那么您除了以下之外别无选择:

HttpUtility.UrlEncode(Request.QueryString["email"]);
Run Code Online (Sandbox Code Playgroud)

或者:

email = email.Replace(' ', '+');
Run Code Online (Sandbox Code Playgroud)