我有一个内置于 .NET Core 3.1 的 API。我想从 .NET Framework 4.7 API 调用它。
我尝试过
System.Net.Http.HttpClient
HttpClient client = new HttpClient();
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync($"{BaseUrl}/{url}", content);
var result = await response.Content.ReadAsStringAsync();
return result;
然后我也尝试了 RestSharp
var request = new RestRequest(url, Method.POST) { RequestFormat = DataFormat.Json };
AddCustomHeaders(ref request);
var json = JsonConvert.SerializeObject(req);
request.AddParameter("application/json", json, ParameterType.RequestBody);
var response = await _client.ExecuteAsync<ApiResult<IEnumerable<T>>>(request);
return response.Data;
请求被冻结,似乎被卡住了。
我的假设是因为 .NET Core 使用
IActionResult
并且 .NET 框架不支持它,所以这就是它不解释的原因。
那么,简单的问题是为什么我们不能从 .NET Framework 调用 .NET Core API?那有什么解决办法吗?
因为数以百万计的应用程序是使用 .NET 框架构建的。
这意味着他们无法在代码中使用新的.NET Core API?
我的 .NET Core 端点是
[HttpPost]
[Route("search/{isRefreshCache}")]
public IActionResult Search(Patient req, bool isRefreshCache)
{
try
{
var result = _patientService.Search(req, isRefreshCache);
return Ok(ApiResult.Success(result));
}
catch (Exception ex)
{
log.Error(ex.Message, ex);
return Ok(ApiResult.Error<string>(ex.Message, (int)HttpStatusCode.BadRequest));
}
}
返回类型为
public class ApiResult<T>
{
public T Output { get; set; }
public bool IsSuccess { get; set; }
public string ErrorMessage { get; set; }
public int ErrorCode { get; set; }
}
API通过网络相互连接,它们可以用任何语言编写,甚至可以用Delphi API到ASP.NET Core API来编写。首先,HttpClient类对卡住的请求有请求超时,它会抛出任何错误吗?其次,尝试调试接收API。它收到请求了吗?它是否将其反序列化为参数?处理代码(可能是控制器或其他东西)是否启动?
我面临着同样的问题。当从 net 4.7 调用 netcore web api 时,请求被冻结。
我通过从代码中删除await关键字解决了这个问题。并通过“.Result”得到结果