无效的URI:当url具有多个冒号时指定的端口无效

我正在使用dnsdynamic.org指向我家中托管的个人网站。 我家的ip会经常每月更换一次。 dnsdynamic.org提供了一个更新ip的web方法调用。

https://username:password@www.dnsdynamic.org/api/?hostname=techno.ns360.info&myip=127.0.0.1 

当我通过浏览器调用它时,它完美无缺。 当我尝试通过c#代码调用它时,它会抛出以下exception。

 Invalid URI: Invalid port specified. at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) at System.Net.WebRequest.Create(String requestUriString) 

由于url中有一个冒号,它看起来像system.uri尝试将我的密码解析为整数。

我尝试在.org之后添加一个端口

 https://username:password@www.dnsdynamic.org:443 

没有运气。

有人可以指点我如何解决这个错误。

我在创建uri时尝试了不要逃避和逃避选项,仍然无法正常工作。

 var ri = new Uri("https://username:password@www.dnsdynamic.org/api/?hostname=techno.ns360.info&myip=127.0.0.1",true); 

编辑:看起来用户名导致问题。 我的用户名是我的电子邮件地址 我的电子邮件地址以* .com结尾。 所以uri试图解析我的密码。

仍未找到解决此问题的解决方案。 我无法更改我的用户名,因为dnsdyanmic.org使用电子邮件地址作为用户名。

如果您使用HttpWebRequest来进行请求,则不应在URI中包含凭据(如您所知,它无效)。

您应该将凭据添加到HttpWebRequest并让它处理它们:

 // Only broke this up for readability var uri = new Uri("https://www.dnsdynamic.org/api/?hostname=techno.ns360.info" + "&myip=127.0.0.1", true); var cache = new CredentialCache(); cache.Add(uri, "Basic", new NetworkCredential("username", "password")); var request = WebRequest.Create(uri); request.Credentials = cache;