我在.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; }
}
1条答案
按热度按时间osh3o9ms1#
API通过网络相互连接,它们可以用任何语言编写,甚至可以用 Delphi API到ASP.NET Core API。首先,HttpClient类对卡住的请求有Request timeout,它会抛出任何错误吗?第二,尝试调试接收API。是否收到请求?它是否将其反序列化为params?处理代码(可能是控制器或smth)是否启动?