【发布时间】: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 控制台应用程序运行时,它确实会引发错误。我已经用运行时的确切版本更新了问题。