c# - asp.net mvc querystring解析将+替换为空格

标签 c# asp.net asp.net-mvc email asp.net-mvc-5

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

我正在使用具有网络序列号验证功能的安装工具。基本上,安装将用户电子邮件和序列号传递到网页(或 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/

相关文章:

c# - 如何在 VB.Net 中创建一个未实现时显示异常代码的接口(interface)方法,就像在 C# 中一样

c# - 使用 Linq 将列表框项值转换为 int

c# - 客户端的互联网速度慢怎么会成为 asp.net 中服务器超时异常的原因?

c# - 如何在 asp.net 中实现 SSL

c# - 每个 visual studio 配置包含/排除文件

c# - 获取今天,上周同一天和去年同一天售出的商品

asp.net - Javascript 文件被 chop

c# - 如何在 Entity Framework 中重命名迁移表?

.net - 不支持具有 null 或空名称的模块。忍者

c# - 使用NEST API进行日期范围搜索以进行 Elasticsearch ,返回不适当的结果