我正在处理一个大型 .NET Core 项目,我们需要从 C# 向特定服务器端点发出 REST 请求。
端点以 http://some.domain.com:70
格式指定。
调用时,将抛出 System.Net.Http.HttpRequestException
类型的异常,并显示消息 The URL is invalid
。
当调用在地址中省略端口的端点时,它工作正常。 在 .NET Framework 4.6 而不是 .NET Core 中运行时,它也能正常工作。
由于几乎所有可以简化这些传出调用的第 3 方库都依赖于 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,它就可以工作。
最佳答案
据我所知,这是由使用端口 70 引起的。Windows 上的 .Net Core 上的 HttpClient
使用 WinHTTP。和 What's New in WinHTTP 5.1说(强调我的):
Starting with Windows Server 2003 and Windows XP with SP2, sending requests to the following well-known, non-HTTP, ports is restricted for security reasons: 21 (FTP), 25 (SMTP), 70 (GOPHER), 110 (POP3), 119 (NNTP), 143 (IMAP).
关于c# - 在 .NET Core 中使用端口调用端点时出现无效 URL 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44694831/