URL 对 C# 中的所有非字母数字进行编码
我需要对电子邮件地址进行完全 URL 编码。
HttpUtility.UrlEncode 似乎忽略某些字符,例如!和 。
我需要在格式如下的 url 中传递电子邮件地址:
/Users/[email protected]/Comments
因为我的 WebMethod uri 模板如下所示:
[WebGet(UriTemplate = "Users/{emailAddress}/Comments")]
句点会中断 WCF,并且不会将电子邮件地址传递给我的 REST Web 服务方法。 删除句点就可以很好地传递该值。我希望有一种方法可以对所有非字母数字字符进行编码,因为使用该服务的所有内容都需要这样做。
编辑
我曾考虑使用:
Convert.ToBase64String(Encoding.ASCII.GetBytes("[email protected]"))
大多数其他语言都有简单的方法将字符串转换为base64吗?我主要担心的是,使用此服务的客户将需要使用 Java、PHP、Ruby 等对电子邮件地址进行编码。
I need to fully URL Encode an email address.
HttpUtility.UrlEncode seems to ignore certain characters such as ! and .
I need to pass an email address in a url formated like this:
/Users/[email protected]/Comments
Because my WebMethod uri template looks like this:
[WebGet(UriTemplate = "Users/{emailAddress}/Comments")]
The period breaks WCF and will not pass the email address to my REST webservice method.
Removing the period passes the value just fine. I'm hoping there is a method which will encode all non alpha numeric characters since everything consuming this service will need to do this.
EDIT
I had considered using:
Convert.ToBase64String(Encoding.ASCII.GetBytes("[email protected]"))
Do most other languages have easy ways to convert a string to base64? My main concern is that our customers who consume this service will need to encode the email address using Java, PHP, Ruby, etc.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是您可以用来完成编码的潜在正则表达式。
Regex.Replace(s, @"[^\w]", m => "%" + ((int)m.Value[0]).ToString("X2"));
我不确定是否存在定义的现有框架方法来严格编码您可以向客户指出的所有非字母数字字符。
Here's a potential Regex you could use to accomplish the encoding.
Regex.Replace(s, @"[^\w]", m => "%" + ((int)m.Value[0]).ToString("X2"));
I'm not sure that there is an existing framework method defined to strictly encode all non-alphanumeric characters that you could point your clients to.
使用十六进制。有一个 ConvertTo 和一个 From 以及一个示例测试...
您还可以使用正则表达式将不匹配 A 到 Z 的字符转义,这样您的 URL 看起来仍然很漂亮。
它将返回一大串数字,所以你应该很好
Use hex. There is a ConvertTo and a From and a sample test...
You can also just scape the characters that don't match A to Z by using a regex so your URL still looks pretty.
It will return a big list of numbers so you should be good
除非我弄错了,否则 URL 编码只是百分号后跟 ASCII 数字(十六进制),所以这应该有效...
上面的代码结果为
something%2Bme%40example.com
Unless I am mistaken, URL Encoding is simply the percent sign followed by the ASCII number (in hex), so this should work...
The above code results in
something%2Bme%40example.com
我发现了这个问题的解决方案。
.Net 4.0实际上已经解决了URI模板中特殊字符的问题。
这条线索为我指明了正确的方向。 http://social.msdn。 microsoft.com/Forums/en/dataservices/thread/b5a14fc9-3975-4a7f-bdaa-b97b8f26212b
我添加了所有配置设置并且它起作用了。但请注意,它仅适用于带有 .Net 4.0 的真实 IIS 设置。我似乎无法让它与 Visual Studio Dev IIS 一起使用。
更新 - 实际上,我尝试删除这些配置设置,它仍然有效。也许.Net 4.0已经默认修复了这个问题。
I've discovered a solution to this issue.
.Net 4.0 has actually fixed the problem with special characters in the URI Template.
This thread pointed me in the right direction. http://social.msdn.microsoft.com/Forums/en/dataservices/thread/b5a14fc9-3975-4a7f-bdaa-b97b8f26212b
I added all the config settings and it worked. But note, it ONLY works with a REAL IIS setup with .Net 4.0. I can't seem to get it to work with the Visual Studio Dev IIS.
Update - Actually, I tried removing those config settings and it still works. It maybe be that .Net 4.0 has fixed this problem by default.