2016-09-05 2 views
1

У меня есть два веб-проекта API 2, один из которых действует как прокси-сервер, один из них - API.Как передать объект JSON с помощью промежуточного API?

Подпись моего прокси является:

public async Task<IHttpActionResult> GetByCatId(string id)

Проект прокси называет свой скрытый апи, например:

client.BaseAddress = new Uri(CatUrl); 
client.DefaultRequestHeaders.Accept.Clear(); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

HttpResponseMessage response = await client.GetAsync($"GetCat/{id}"); 

Это возвращает JSON объект, который я хочу, чтобы просто возвращение вызывающему абоненту.

Потому что C# знает, что это объект JSON, я должен разобрать его в объект JSON (т. Е. response.Content.ReadAsAsync<string>). Однако я хочу, чтобы прокси был немым и не заботился о типах, поэтому я не могу этого сделать, потому что он попытается JSON десериализовать объект в строку и выставить исключение.

Если я захвачу поток (response.Content.ReadAsStreamAsync()), я могу разобрать его в строке, однако, если я верну строку в новом ответе, он не будет знать, что это JSON, и просто возвращает строку, а не JSON объект (то есть ответ что-то вроде "{ content: "{ .... my json string all in one string ... }" }"

Как я могу пройти через объект JSON, сохраняя при этом тот факт, что это объект JSON

+0

Вы можете прочитать строку json, а затем преобразовать строку в динамический объект с помощью ** JObject **, выполнив что-то вроде этого: 'string json = wait response.Content.ReadAsStringAsync(); динамический jsObj = JObject.Parse (json); ' – Cizaphil

+1

, если вы хотите вернуть объект json, идущий с ответом, просто выполните:' return ResponseMessage (response); ' –

+0

Метод' ResponseMessage' был тем, который я искал, если вы отвечаете как ответ, я могу отметить это - я потратил годы на поиск способа конвертировать 'HttpResponseMessage' в' IHttpActionResult', и это точный барсук – NibblyPig

ответ

2

Если вы хотите, чтобы вернуть объект JSON приходит с ответом просто сделать:.?

return ResponseMessage(response); 
Смежные вопросы