我们不能从.NET Framework 4.7调用.NET Core API吗

问题描述 投票:0回答:2

我有一个内置于 .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; }
}
.net .net-core httpclient restsharp webapi
2个回答
0
投票

API通过网络相互连接,它们可以用任何语言编写,甚至可以用Delphi API到ASP.NET Core API来编写。首先,HttpClient类对卡住的请求有请求超时,它会抛出任何错误吗?其次,尝试调试接收API。它收到请求了吗?它是否将其反序列化为参数?处理代码(可能是控制器或其他东西)是否启动?


0
投票

我面临着同样的问题。当从 net 4.7 调用 netcore web api 时,请求被冻结。

我通过从代码中删除await关键字解决了这个问题。并通过“.Result”得到结果

© www.soinside.com 2019 - 2024. All rights reserved.