我有一个使用Asp.Net Boilerplate的Asp.Net Core(2.1)网站。
我试图使用HttpClient
进行API调用,本地工作正常,但在部署到IIS时会抛出错误。
我创建了一个TypedClient
。
public class FormsHttpClient : IFormsHttpClient
{
private const string url = "my_url:3001/";
private readonly HttpClient _client;
public FormsHttpClient(HttpClient httpClient)
{
httpClient.BaseAddress = new Uri(url);
_client = httpClient;
}
....
}
在我的
startup.cs
文件中,我添加了以下代码:
services.AddHttpClient<IFormsHttpClient, FormsHttpClient>();
当我部署时出现的错误如下:
网络调用通常需要1800ms才能完成,但似乎在21000ms左右超时。ERROR 2018-12-12 18:30:29,509 [11 ] Mvc.ExceptionHandling.AbpExceptionFilter - 因为连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 System.Net.Http.HttpRequestException: 因为连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。---> System.Net.Sockets.SocketException: 因为连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败 at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken) --- End of inner exception stack trace ---
我发现了代码
AppContext.SetSwitch("System.Net.Http.useSocketsHttpHandler", false);
,但不确定该将其放在哪里,于是将其放在我的 startup.cs
类的构造函数中,但它似乎没有任何效果。还有其他我忽略的东西吗?
E:调用API的代码在JS中:
app.forms.token = {
generate: function () {
Formio.logout();
abp.services.app.forms.generateFormToken().done(function (e) {
Formio.setToken(e);
});
},
clear: function () {
Formio.logout();
}
}
500
@gabriel,我可以在同一设备上使用 postman 进行相同的 api 调用,因此我肯定可以访问它。看起来是任何HttpClient
的PostAsync
或GetAsync
上都失败了,具体取决于我发出的哪个调用。 - highboi