在Visual Studio中调试WebApi不会返回对MVC应用程序的响应

时间:2014-03-05 18:18:20

标签: c# visual-studio asp.net-mvc-5 visual-studio-debugging asp.net-web-api2

我在同一个解决方案中有一个WebApi和MVC5应用程序。当我调试这些MVC5应用程序调用WebApi时,它没有收到响应。

使用完全相同的代码和数据与控制台应用程序而不是MVC5应用程序,然后响应恢复正常。

在mvc app中,不会返回任何HTTP响应。我调试了代码,调用进入了web-api。

我正在使用的代码类似于下面的代码,我正在调用DoMyPost()。没有响应来自等待HttpClient.PostAsJsonAsync(url,model);

    public MyModel DoMyPost(ModelIN model)
    {
        return PostAsJsonAsync("url", model).Result;
    }

    protected async Task<MyModel> PostAsJsonAsync(string url, ModelIN model)
    {
        var response = await HttpClient.PostAsJsonAsync(url, model);
        return await ReadMyModel(response);
    }

有什么可能出错的想法?​​

我在Windows 8机器上。

=== EDIT

我启动了MVC5和web-api应用程序 我调试MVC 5应用程序并看到它通过我上面概述的代码进行调用 断点在web-api中被击中,我可以一步一步直到产生响应 然后MVC 5应用程序等待,似乎永远不会得到任何响应。

我已经使用控制台应用程序替换了MVC5应用程序,它收到的回复很好。

谢谢

== THE FIX

将代码更改为以下修复了问题

public MyModel DoMyPost(ModelIN model)
    {
         var response = await HttpClient.PostAsJsonAsync(url, model).Result;
     return ReadMyModel(response).Result;
    }

    protected async Task<MyModel> PostAsJsonAsync(string url, ModelIN model)
    {
        var response = await HttpClient.PostAsJsonAsync(url, model);
        return await ReadMyModel(response);
    }

1 个答案:

答案 0 :(得分:0)

我将尝试猜测这里发生了什么。看起来您正在对MVC5方法“DoMyPost”进行同步调用,然后尝试在PostAsJsonAsync中返回异步结果。

我认为你应该考虑到你需要发生什么以及为什么。在MVC5中使用async是很好的post

此外,here是对MVC5和WebApi之间差异的快速而肮脏的解释。见底部评论。