我是否需要在ASP.NET MVC应用程序中执行一些特殊操作才能从Web API 2应用程序读取Json响应?

我是否需要在ASP.NET MVC应用程序中执行一些特殊操作才能从Web API 2应用程序读取Json响应?,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,asp.net-web-api2,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Asp.net Web Api2,我需要在ASP.NET MVC应用程序中定义一些特殊的内容来读取来自ASP.NET Web API的传入响应吗 在我的MVC应用程序中,我使用System.NET.HttpClient向ASP.NET Web API发出请求。API接收请求并对其进行良好处理,然后返回有效响应。然而,MVC应用程序似乎从未得到响应。我在提出请求的线路上有一个断点。执行该行后,控制流再也不会返回。MVC应用程序只是一直在等待,很长一段时间后超时 但是,我可以确认API返回了有效的Json响应。我曾尝试在Chrome

我需要在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);
    }
}
公共异步任务同步(字符串uri,T值)
{
使用(var client=new HttpClient())
{
client.BaseAddress=新Uri(_baseUri);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
var response=wait client.PostAsJsonAsync(uri,值);
if(response.issuccesstatuscode)返回wait response.Content.ReadAsAsync();
否则返回默认值(R);
}
}

在过去,即在WebAPI 2之前,我已经让MVC应用程序与WebAPI进行了对话,没有任何问题。我不知道我是否遗漏了Web API 2中引入的某些内容。

我感觉您陷入了僵局。您是否在任何地方使用
.Result
?您应该一直使用
async
。我的意思是,您的MVC操作方法也应该是
async
方法,它们应该
wait
而不是使用
。Result
。更多信息,请阅读斯蒂芬·克利里的日志

您确定您的WebAPI应用程序收到此请求吗?如果你说有超时,可能是你的URL有问题。是否可以连接到WebAPI应用程序并在目标方法中设置断点?是否命中?是的,Web API接收请求并正确处理它,并返回有效的JSON响应。我已经设置了断点,也看到了问题中提到的Chrome Postman的响应。事实上,看起来你做的每件事都是正确的。。。我会再次检查您的服务是否收到您的请求。您可以为Chrome Postman提供正确的URL,而在代码中您有另一个URL。例如,您也可以尝试使用Fiddler或Wireshark,查看您的请求实际到达了哪里以及响应中包含了什么。