无效的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使用电子邮件地址作为用户名。

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

如果您使用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;