2016-11-17 3 views
0

У меня есть внешний интерфейс API, который размещается на другом домене сейчас мы можем использовать следующий URL-адрес в качестве примераASP.NET MVC контроллер метод GET для внешнего API

https://myapi.mydomain/api/data

Этот API возвращает следующие данные

{"data":[ 
    { 
     "id":1, 
     "company":"JUST A DEMO", 
     "ext_identifier":"DEMO1" 
    }, 
    { 
     "id":2, 
     "company":"ANOTHER DEMO", 
     "ext_identifier":"DEMO2" 
    } 
]} 

Мне нужно вызвать метод контроллера, который делает запрос GET против этого API, а затем возвращает данные в формате JSON для меня, чтобы потреблять.

До сих пор я следующий код, я думаю, что я близко ....

Вот код контроллера

string url = "https://myapi.mydomain/"; 

    [HttpGet] 
    public async Task<ActionResult> Search() 
    { 
     CustomerList customers = null; 

     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri(url); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      // New code: 
      HttpResponseMessage response = await client.GetAsync("api/data"); 
      if (response.IsSuccessStatusCode) 
      { 
       customers = await response.Content.ReadAsAsync<CustomerList>(); 
      } 
     } 
     return Json(new 
     { 
      data = customers 
     }, 
     JsonRequestBehavior.AllowGet); 
    } 

public class CustomerList 
{ 
    public int id { get; set; } 
    public string company { get; set; } 
    public string ext_identifier { get; set; } 
} 
+1

В чем проблема? – Nkosi

+0

Извинения, что я просто не получал никаких данных назад, похоже, что это было неудачно на линии ReadAsAsync –

+0

, которую вы хотите прочитать json Data в своем MVC-контроллере? – Aravind

ответ

0

Почему, когда я задать вопрос через 10 минут я придумайте ответ, так вот, если кто-то заинтересован.

Это, кажется, самое элегантное решение, которое я могу придумать, но если у кого есть какие-либо улучшения, пожалуйста, дайте мне знать спасибо.

[HttpGet] 
    public async Task<ActionResult> GetCustomers() 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri(url); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

      HttpResponseMessage response = await client.GetAsync(customerApi); 
      if (response.IsSuccessStatusCode) 
      { 
       string jsondata = await response.Content.ReadAsStringAsync(); 
       return Content(jsondata, "application/json"); 
      } 
      return Json(1, JsonRequestBehavior.AllowGet); 
     } 
    } 
Смежные вопросы