使用.NET Core中的端口调用端点时出现无效的URL异常

时间:2017-06-22 09:01:11

标签: c# .net .net-core

我正在开发一个大型.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,它就可以工作。

1 个答案:

答案 0 :(得分:3)

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

  

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