Есть ли что-то особенное, которое мне нужно определить в приложении ASP.NET MVC для чтения входящего ответа от веб-API ASP.NET?Нужно ли делать что-то особенное в приложении ASP.NET MVC, чтобы прочитать ответ Json из приложения Web API 2?
Из моего приложения MVC я делаю запрос к веб-API ASP.NET с помощью System.Net.HttpClient
. API получает запрос и обрабатывает его и возвращает действительный ответ. Однако приложение MVC, похоже, никогда не получает ответа. У меня есть точка останова на строке, которая делает запрос. Поток управления никогда не возвращается после выполнения этой линии. Приложение MVC просто продолжает ждать и время ожидания после очень долгого времени.
Однако я могу подтвердить, что API возвращает действительный ответ Json. Я пробовал составить этот запрос в Chrome Postman и убедиться, что API возвращает действительный ответ.
Вот код из моего приложения MVC, что делает запрос к Web API:
public async Task<R> PostAsJsonAsync<T, R>(string uri, T value)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_baseUri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsJsonAsync(uri, value);
if (response.IsSuccessStatusCode) return await response.Content.ReadAsAsync<R>();
else return default(R);
}
}
В прошлом, т.е. до Web API 2, я имел MVC приложения поговорить с Web API без каких-либо проблема. Я не знаю, не хватает ли я чего-то, что было введено в Web API 2.
Вы уверены, что ваше приложение WebAPI получает этот запрос? Если вы говорите, что есть тайм-аут, возможно, что-то не так с вашим URL-адресом. Можете ли вы подключиться к своему приложению WebAPI и установить точку останова в методе назначения? Это было сделано? – Eadel
Да, веб-API получает запрос и обрабатывает его правильно и возвращает действительный ответ JSON. Я установил точки останова, а также увидел ответ с Chrome Postman, как упоминалось в вопросе. –
На самом деле, кажется, вы все делаете правильно ... Я бы дважды проверял, получает ли ваш запрос ваш запрос. Вы можете указать Chrome Postman с правильным URL-адресом, в то время как в коде у вас есть другой. Вы также можете попробовать, например, Fiddler или Wireshark, и посмотреть, где именно вы запрашиваете, и что находится в ответе. – Eadel