Как передать HTTP-ответ без изменений через промежуточный веб-API в ASP. NET Core 3? - PullRequest
0 голосов
/ 28 апреля 2020

В ASP. NET Core 3, как лучше всего вызвать веб-API, которому я доверяю, с моего сайта (на стороне сервера) и передать его ответ на моем сайте?

Например, у меня есть действие контроллера, подобное этому, и я хочу просто получить любой статус HTTP и данные JSON и т. Д. c. выходит из вызова.

[HttpGet]
public async Task<IActionResult> Get(int id){
   string url = "https://...";
   return await httpClient.GetAsync(url);  // not quite right...
}

Однако GetAsyn c возвращает HttpResponseMessage. Должен ли я преобразовать это в IActionResult? Если это так, как я могу сделать это, не прибегая к System.Web.Http.ResponseMessageResult от Microsoft.AspNetCore.WebApiCompatShim (так как мне не нужна совместимость со старыми соглашениями о веб-API)? Я чувствую, что есть более простой подход, который я пропускаю.

(Конечно, я хотел бы, чтобы здесь был метод с наименьшими затратами, поскольку я не стремлюсь преобразовать или увеличить ответ. Без десериализации, особенно.)

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Вы можете попробовать:

[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});
}
0 голосов
/ 28 апреля 2020

Самое простое, что вы можете сделать, это просто вернуть строковый результат. При таком подходе вам нужно будет проанализировать строку Json на стороне клиента.

[HttpGet]
public async Task<IActionResult> Get(int id){
   string url = "https://...";
   return await 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);
}
...