Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 如何通过ASP.NET Core 3中的中间Web API传递HTTP响应?_Asp.net Core_Asp.net Web Api_Asp.net Core 3.1 - Fatal编程技术网

Asp.net core 如何通过ASP.NET Core 3中的中间Web API传递HTTP响应?

Asp.net core 如何通过ASP.NET Core 3中的中间Web API传递HTTP响应?,asp.net-core,asp.net-web-api,asp.net-core-3.1,Asp.net Core,Asp.net Web Api,Asp.net Core 3.1,在ASP.NET Core 3中,从我的站点(服务器端)调用我信任的Web API并在我的站点上传递其响应的最佳方式是什么 例如,我有一个这样的控制器操作,我只想从调用中获取任何HTTP状态和JSON数据等 [HttpGet] 公共异步任务Get(int-id){ 字符串url=”https://..."; return wait httpClient.GetAsync(url);//不太正确。。。 } 但是,GetAsync返回一个HttpResponseMessage。我应该将其转换为IA

在ASP.NET Core 3中,从我的站点(服务器端)调用我信任的Web API并在我的站点上传递其响应的最佳方式是什么

例如,我有一个这样的控制器操作,我只想从调用中获取任何HTTP状态和JSON数据等

[HttpGet]
公共异步任务Get(int-id){
字符串url=”https://...";
return wait httpClient.GetAsync(url);//不太正确。。。
}
但是,GetAsync返回一个HttpResponseMessage。我应该将其转换为IActionResult吗?如果是这样的话,我如何在不借助Microsoft.AspNetCore.WebApiCompatShim中的System.Web.Http.ResponseMessageResult的情况下执行此操作(因为我不需要与旧的Web API约定兼容)?我觉得我缺少了一个更简单的方法


(当然,我希望这里的方法开销最小,因为我不寻求转换或扩充响应。尤其是不进行反序列化。)

最简单的方法就是返回字符串结果。使用此方法,您需要在客户端解析Json字符串

[HttpGet]
public async Task<IActionResult> Get(int id){
   string url = "https://...";
   return await httpClient.GetStringAsync(url);
}
[HttpGet]
公共异步任务Get(int-id){
字符串url=”https://...";
返回wait-httpClient.GetStringAsync(url);
}
如果你想返回一个json对象,你必须对它进行建模绑定

[HttpGet]
public async Task<MyType> Get(int id){
   string url = "https://...";
   var content = await httpClient.GetStringAsync(url);
   // this is Newtonsoft.Json, use the System.Text.Json if you are on .net core 3.*
   return JsonConvert.DeserializeObject<MyType>(content);
}
[HttpGet]
公共异步任务Get(int-id){
字符串url=”https://...";
var content=wait-httpClient.GetStringAsync(url);
//这是Newtonsoft.Json,如果您使用的是.net core 3,请使用System.Text.Json*
返回JsonConvert.DeserializeObject(内容);
}

最简单的方法就是返回字符串结果。使用此方法,您需要在客户端解析Json字符串

[HttpGet]
public async Task<IActionResult> Get(int id){
   string url = "https://...";
   return await httpClient.GetStringAsync(url);
}
[HttpGet]
公共异步任务Get(int-id){
字符串url=”https://...";
返回wait-httpClient.GetStringAsync(url);
}
如果你想返回一个json对象,你必须对它进行建模绑定

[HttpGet]
public async Task<MyType> Get(int id){
   string url = "https://...";
   var content = await httpClient.GetStringAsync(url);
   // this is Newtonsoft.Json, use the System.Text.Json if you are on .net core 3.*
   return JsonConvert.DeserializeObject<MyType>(content);
}
[HttpGet]
公共异步任务Get(int-id){
字符串url=”https://...";
var content=wait-httpClient.GetStringAsync(url);
//这是Newtonsoft.Json,如果您使用的是.net core 3,请使用System.Text.Json*
返回JsonConvert.DeserializeObject(内容);
}
您可以尝试:

[HttpGet]
public async Task<IActionResult> Get()
{
    HttpClient httpClient = new HttpClient();
    string url = "http://localhost:...";
    var response =   httpClient.GetAsync(url).Result;
    var statusCode = response.StatusCode;
    string responseBody = await response.Content.ReadAsStringAsync();
    return Ok(new { StatusCode = statusCode,ResponseBody = responseBody});
}
[HttpGet]
公共异步任务Get()
{
HttpClient HttpClient=新HttpClient();
字符串url=”http://localhost:...";
var response=httpClient.GetAsync(url).Result;
var statusCode=response.statusCode;
string responseBody=wait response.Content.ReadAsStringAsync();
返回Ok(新的{StatusCode=StatusCode,ResponseBody=ResponseBody});
}
您可以尝试:

[HttpGet]
public async Task<IActionResult> Get()
{
    HttpClient httpClient = new HttpClient();
    string url = "http://localhost:...";
    var response =   httpClient.GetAsync(url).Result;
    var statusCode = response.StatusCode;
    string responseBody = await response.Content.ReadAsStringAsync();
    return Ok(new { StatusCode = statusCode,ResponseBody = responseBody});
}
[HttpGet]
公共异步任务Get()
{
HttpClient HttpClient=新HttpClient();
字符串url=”http://localhost:...";
var response=httpClient.GetAsync(url).Result;
var statusCode=response.statusCode;
string responseBody=wait response.Content.ReadAsStringAsync();
返回Ok(新的{StatusCode=StatusCode,ResponseBody=ResponseBody});
}

如果调用GetStringAsync,我会丢失HTTP状态,对吗?如果失败,我希望传递状态。@从HttpClient获得的PatrickSzalapski响应对象与asp.net core生成的响应不同。您需要创建自定义绑定。@PatrickSzalapski,或者尝试类似的方法?是的,那个AspNetCore.Proxy包正是我需要的。谢谢。如果我调用GetStringAsync,我将丢失HTTP状态,对吗?如果失败,我希望传递状态。@从HttpClient获得的PatrickSzalapski响应对象与asp.net core生成的响应不同。您需要创建自定义绑定。@PatrickSzalapski,或者尝试类似的方法?是的,那个AspNetCore.Proxy包正是我需要的。谢谢。如果是4xx或5xx,它不会传递HTTP状态代码吗?如果是4xx或5xx,它不会传递HTTP状态代码吗?