C# asp.net mvc查询字符串解析替换了+;有空间

C# asp.net mvc查询字符串解析替换了+;有空间,c#,asp.net,asp.net-mvc,email,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Email,Asp.net Mvc 5,这是一个奇怪的(无论如何对我来说)查询字符串问题 我正在使用一个具有web序列号验证的安装工具。基本上,安装会将用户的电子邮件和序列号传递到一个网页(或MVC的控制器方法),该网页接受查询字符串参数,并执行魔术来验证安装 其中一个参数是在查询字符串中传递的电子邮件地址 我最近有一个用户使用“+”电子邮件地址购买订阅。在他去安装产品并通过验证屏幕之前,一切都很顺利 在做了一些挖掘之后,我发现那不是我收到的 “乔+foo@gmail.com" 验证代码接收 “乔foo@gmail.com" 当然,该

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

我正在使用一个具有web序列号验证的安装工具。基本上,安装会将用户的电子邮件和序列号传递到一个网页(或MVC的控制器方法),该网页接受查询字符串参数,并执行魔术来验证安装

其中一个参数是在查询字符串中传递的电子邮件地址

我最近有一个用户使用“+”电子邮件地址购买订阅。在他去安装产品并通过验证屏幕之前,一切都很顺利

在做了一些挖掘之后,我发现那不是我收到的 “乔+foo@gmail.com"

验证代码接收 “乔foo@gmail.com"

当然,该空间破坏了验证尝试,因为他的电子邮件地址现在是错误的

我和安装工具公司(高级安装工具,地球上最好的安装工具)谈过,他们声称(我相信他们)电子邮件发送正确

因此,我要问的是,如何让asp.net mvc querystring解析器对该特定参数执行正确的操作,并将带有“+”的字符串传递给contoller方法

重要的是asp.NETMVC5

谢谢你能提供的一切帮助

更新

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

因此,我要寻找的是一种为特定URL(并且仅为该URL)定制查询字符串解析器的方法

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


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

假设您是从javascript调用URL,而不是执行以下操作:

url += "?email=" + email;
对值进行如下编码:

url += "?email=" + encodeURIComponent(email);
如果从服务器调用URL,则:

string encodedEmail = Server.UrlEncode(email);
更新

如果无法更改调用URL的位置,则除了以下选项外,您没有其他选择:

HttpUtility.UrlEncode(Request.QueryString["email"]);
或:


假设您是从javascript调用URL,而不是执行以下操作:

url += "?email=" + email;
对值进行如下编码:

url += "?email=" + encodeURIComponent(email);
如果从服务器调用URL,则:

string encodedEmail = Server.UrlEncode(email);
更新

如果无法更改调用URL的位置,则除了以下选项外,您没有其他选择:

HttpUtility.UrlEncode(Request.QueryString["email"]);
或:


看起来我必须使用我的黑客解决方案,在特定的查询字符串参数中用空格替换加号。在我看来,这不是一个理想的解决方案,但它会起到作用。

看起来我不得不采用我的黑客解决方案,在特定的查询字符串参数中用空格替换加号。在我看来,这不是理想的解决方案,但它会起作用。

在发送查询字符串参数之前,您是否尝试过对其进行编码?重复的?如果是工具未编码地传递+符号,则是工具出错。你的控制员做的是正确的,仅供参考。对于gmail,至少我相信joe+foo@gmail.com将发送到joe@gmail.comHave您尝试在发送查询字符串参数之前对其进行编码?重复?如果是工具未编码地传递+符号,则是工具出错。你的控制员做的是正确的,仅供参考。对于gmail,至少我相信joe+foo@gmail.com将发送到joe@gmail.comThe对url的调用来自客户端工具(MSI应用程序安装程序),因此我无法控制它的调用方式,我需要阻止asp.net mvc处理的解析将+转换为空间,至少对于该url。在这种情况下,除了执行
HttpUtility.UrlEncode(Request.QueryString[“email”]),我不确定您是否还有其他选择
email=email.Replace(“,+”)替换最终是解决方案,尽管我不太喜欢它。谢谢你的帮助。是的,我知道它很难看,但我不知道如何避免自动解码
HttpRequest
。我正在更新我的答案对url的调用来自客户端工具(MSI应用程序安装程序),因此我无法控制它的调用方式,我需要阻止asp.net mvc处理的解析将+转换为空格,至少对于该url。在这种情况下,除了执行
HttpUtility.UrlEncode(Request.QueryString[“email”]),我不确定您是否还有其他选择
email=email.Replace(“,+”)替换最终是解决方案,尽管我不太喜欢它。谢谢你的帮助。是的,我知道它很难看,但我不知道如何避免自动解码
HttpRequest
。我正在更新我的答案