【问题标题】:Invalid URL exception when calling endpoint with port in .NET Core在 .NET Core 中使用端口调用端点时出现无效的 URL 异常
【发布时间】:2017-06-26 05:14:06
【问题描述】:

我正在处理一个大型 .NET Core 项目,我们需要从 C# 向特定服务器端点发出 REST 请求。

端点以http://some.domain.com:70的格式指定。

调用时,会抛出 System.Net.Http.HttpRequestException 类型的异常,消息为 The URL is invalid

当调用在地址中省略端口的端点时,它可以正常工作。 在 .NET Framework 4.6 而不是 .NET Core 中运行它也可以正常工作。

由于几乎所有可以简化这些传出调用的第三方库都依赖于System.Net.Http,因此问题仍然存在。

下面是一个可以作为控制台应用程序尝试的最小工作示例(.NET Core 中抛出的异常,在 .NET Framework 4.6 中可以正常工作)

using System;

    namespace NetCoreConsoleTestREST
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Calling service...");
                Test();
                Console.ReadKey();
            }


            public static async void Test()
            {
                var client = new System.Net.Http.HttpClient();
                var res = await client.GetAsync(new Uri("http://some.domain.com:70")); //This doesn't work in .NET Core
                //var res = await client.GetAsync(new Uri("https://requestb.in/wy9h8gwy")); //This works perfectly fine

                Console.WriteLine(res);
            }
        }
    }

我安装的 .NET Core 版本

Microsoft .NET Core Shared Framework Host

  Version  : 1.1.0
  Build    : 928f77c4bc3f49d892459992fb6e1d5542cb5e86

这是 .NET CoreFX 中的错误还是设计使然?


更新 仅当我使用端口号 70 时它才会失败。如果我切换到即 1234 则它可以工作。

【问题讨论】:

  • 我在 .Net Core 中没有收到该异常消息。你用的是哪个版本?
  • 在 .Net Core 版本 1.1.0 上失败
  • 我也没有收到该消息。请向我们提供您对项目的依赖项,我也在使用 .Net Core 1.1.0 和 System.Net.Http 4.3.2。尝试从您的浏览器请求相同的 url。您可能忘记添加内容了。
  • 您的网址中也可能有一些奇怪的字符。您能否提供一些实际代码来显示发生的错误,因为上面的 sn-p 很好(除了您没有等待异步 Test 方法的事实)
  • 网址是写的而不是粘贴的,所以没有隐藏的无效字符或类似的东西。上面的代码是一个简化的示例,当我在 VS2017 中将其作为 .NET Core 控制台应用程序运行时,它确实会引发错误。我已经用运行时的确切版本更新了问题。

标签: c# .net .net-core


【解决方案1】:

据我所知,这具体是由使用端口 70 引起的。Windows 上 .Net Core 上的HttpClient 使用 WinHTTP。 What's New in WinHTTP 5.1 说(强调我的):

从 Windows Server 2003 和带有 SP2 的 Windows XP 开始,出于安全原因,限制向以下众所周知的非 HTTP 端口发送请求:21 (FTP)、25 (SMTP) , 70 (GOPHER), 110 (POP3), 119 (NNTP), 143 (IMAP)。

【讨论】:

  • 不错的发现! IIRC,我尝试了您链接的文章中未提及的其他不起作用的保留端口。明天我会尽快重新检查并重新处理,否则我认为这是答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-06
  • 2017-12-16
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多