【发布时间】:2014-07-11 21:20:10
【问题描述】:
我需要在 ASP.NET MVC 应用程序中定义什么特别的东西来读取来自 ASP.NET Web API 的传入响应吗?
从我的 MVC 应用程序中,我使用 System.Net.HttpClient 向 ASP.NET Web API 发出请求。 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 应用程序并在目标方法中设置断点吗?被击中了吗?
-
是的,Web API 接收到请求并正确处理它并返回有效的 JSON 响应。如问题中所述,我已经设置了断点,并且还看到了 Chrome Postman 的响应。
-
事实上,看起来你做的一切都是正确的......我会仔细检查你的服务是否收到了你的请求。您可以为 Chrome Postman 提供正确的 URL,而在此处的代码中您有另一个。例如,您还可以尝试 Fiddler 或 Wireshark,看看您的请求实际去了哪里以及响应中的内容。
标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api asp.net-web-api2