【问题标题】:Invalid URI: Invalid port specified when url has more than one colon无效的 URI:当 url 有多个冒号时指定的端口无效
【发布时间】:2013-03-20 20:28:14
【问题描述】:

我正在使用 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.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 使用电子邮件地址作为用户名。

【问题讨论】:

  • 我刚刚将您的代码复制到了一个新的 Visual Studio 项目中,它按原样运行。
  • 在 3.5 和 4.5 中也适用于我;您使用的是什么版本的 .NET?
  • 谢谢你指点我。问题似乎是我的用户名有 *.com。我的用户名是我的电子邮件地址。请使用电子邮件地址而不是用户名尝试相同的代码。

标签: c# httpwebrequest uri


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 2023-01-25
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多