2016-12-23 13 views
1

Я работаю над созданием API, который вызывает другой сторонний API. Сторона API третьей является REST API и возвращает ответ в формате JSON, когда я называю ее в веб-браузереПолучение ответа от Rest API

[{"Acc":"IT","Cnt":"023","Year":"16"}] 

Я пытаюсь получить тот же ответ, когда я вызываю API третьей стороны от моего API.

public IHttpActionResult Get(string acctID) 
{ 
    using (var client_EndPoint= new HttpClient()) 
    { 
     Uri uri_EndPoint = new Uri(BaseURL_EndPoint); 
     client_EndPoint.BaseAddress = uri; 
     client_EndPoint.DefaultRequestHeaders.Accept.Clear(); 
     client_EndPoint.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     string EndPoint_URL = BaseURL_EndPoint+"api/NameCreation?Account="+acctID; 
     var response_EndPoint = client_EndPoint.GetAsync(EndPoint_URL).Result; 
     string responseString = response_EndPoint.Content.ReadAsStringAsync().Result; 
     return Ok(responseString); 
    } 
} 

Что я делаю, так это получение ответа от стороннего API в строке. Но я проверяю, есть ли способ, которым я могу попасть в формате JSON, чтобы я мог вернуть их напрямую. Возвращаемым типом метода get является IHttpActionResult. Если я возвращаюсь как строка, ответ выглядит как

"[{\"Acc\":\"adm\",\"Cnt\":\"001\",\"Year\":\"16\"}]" 

Любая помощь очень ценится.

+0

Показать весь проход через метод как вернуть данные. Случается, что строка json снова сериализуется при передаче – Nkosi

+0

Этот метод является 'public IHttpActionResult Get (string LabName)' Я пытался использовать return Ok (responseString); 'даже тот, который возвращает ответ вроде' "[{\" Acc \ ": \" adm \ ", \" Cnt \ ": \" 001 \ ", \" Year \ ": \" 16 \ "}]" ' – user4912134

+0

Взгляните на приведенный здесь ответ http: // stackoverflow .com/a/40836422/5233410 – Nkosi

ответ

1

Создание модели для хранения отдыха API данных

public class Model { 
    public string Acc { get; set; } 
    public string Cnt { get; set; } 
    public string Year { get; set; } 
} 

десериализации его от апи

var response_EndPoint = await client_EndPoint.GetAsync(EndPoint_URL); 
var models = await response_EndPoint.Content.ReadAsAsync<Model[]>(); 

А потом вернуться, что

return Ok(models); 

Полный пример

public async Task<IHttpActionResult> Get(string LabName) { 

    using (var client_EndPoint = new HttpClient()) { 

     //...other code removed for brevity 

     var response_EndPoint = await client_EndPoint.GetAsync(EndPoint_URL); 
     var models = await response_EndPoint.Content.ReadAsAsync<Model[]>(); 
     return Ok(models); 
    } 
} 
+0

Спасибо NKosi за подробное объяснение. Но теперь te проблема заключается в том, что return выглядит как [{«Acc»: null, «Cnt»: null, «Year»: «16»}] Значения null, это должно быть [{«Acc»: «IT», Cnt ":" 023 "," Year ":" 16 "}] – user4912134

+0

Обнаружена проблема. Это была ошибка из myside. Благодаря тонну. – user4912134

1

вы можете использовать Newtonsoft.Json, Просто добавьте его из NuGet и добавьте этот конфиг в webapiconfig:

var json = config.Formatters.JsonFormatter; 
json.SerializerSettings.PreserveReferencesHandling =  
Newtonsoft.Json.PreserveReferencesHandling.Objects; 
config.Formatters.Remove(config.Formatters.XmlFormatter); 

затем использовать

return Json(responseString) 
+0

Я не могу удалить Xml Formatter, потому что я также вызываю другой api из того же, который возвращает XML – user4912134

+0

ok. поэтому просто добавьте форматировщик json media и не удаляйте xml. затем используйте return json() –

+0

В нем говорится, что json не существует в текущем контсете в 'return json (responseString)' – user4912134

Смежные вопросы