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