【问题标题】:Do I need to do something special in the ASP.NET MVC app to read a Json response from a Web API 2 application?我是否需要在 ASP.NET MVC 应用程序中执行一些特殊操作才能从 Web API 2 应用程序读取 Json 响应?
【发布时间】: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


【解决方案1】:

我感觉你陷入了僵局。你在任何地方使用.Result 吗?您应该一直使用async。我的意思是您的 MVC 操作方法也应该是 async 方法,它们应该是 await 而不是使用 .Result。阅读 Stephen Cleary 的这篇日志文章以获取更多信息。 http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2022-01-25
    • 2010-09-21
    相关资源
    最近更新 更多