无效的URI:当url有多个冒号时指定的端口无效
本文关键字:无效 URI url | 更新日期: 2023-09-27 18:04:51
我使用dnsdynamic.org来指向我在家里托管的个人网站。我的家庭ip一个月换一次。Dnsdynamic.org提供一个web方法调用来更新ip.
https://username:password@www.dnsdynamic.org/api/?hostname=techno.ns360.info&myip=127.0.0.1
当我通过浏览器调用它时,它工作完美。当我尝试通过c#代码调用它时,它会抛出以下异常:
Invalid URI: Invalid port specified.
at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
at System.Net.WebRequest.Create(String requestUriString)
因为url中有一个冒号,所以看起来像system。
我尝试在。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试图解析我的密码。
仍然没有找到解决这个问题的方法。我不能更改我的用户名,因为dnsdynammic.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;