.net 我们可以从. NETFramework 4.7中调用. NETCore API吗

jxct1oxe  于 2023-06-25  发布在  .NET
关注(0)|答案(1)|浏览(114)

我在.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; }
}
osh3o9ms

osh3o9ms1#

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

相关问题