在mailto:protocol中使用%40而不是@时的UriFormatException

时间:2014-01-10 08:25:49

标签: c# uri mailto

我正在编写一个默认邮件客户端,以便在有人点击mailto:bob@example.com

时进行处理

craigslist mailto链接的格式为mailto:bob%40example.com
使用时会出现异常。
这里有一些简单的代码来重复c#

中的问题
System.Uri u1 = new Uri(@"mailto:bob@ms.com");  // ok so far
System.Uri u2 = new Uri(@"http://somewhere.foo/profile/username%40somewhere.foo"); // still ok
System.Uri u3 = new Uri(@"mailto:bob%40ms.com");  // crash here
问题1:
shoud not mailto:bob%40example.com是一个有效的uri

问题2:
如果它是无效的uri那么前景如何不会崩溃。

我正在使用visual studio 2012

1 个答案:

答案 0 :(得分:4)

RFC 6068(http://www.ietf.org/rfc/rfc6068.txt)定义了mailto协议,指定%40是将@替换为用户名/域名分隔符的有效语法。

它确实指定如果用户名包含@,例如hello@you@domain.com,则可以使用%40将其转义为hello%40you@domain.com。但是它没有说明hello%40domain.com将是一个有效的mailto URI。

如果微软决定在Outlook中支持它,那仍然不会改变RFC,这是权威的,没有定义它 - 所以我会说,微软可能因为健壮性,或者它可能是解析%xx语法的任何URI的副作用...