Web API调用未返回

时间:2016-06-27 21:24:12

标签: json asp.net-web-api dotnet-httpclient windows-integrated-auth

我有一个正常运行的RESTful Web API,因为我可以用Fiddler测试它。我看到电话正在通过,我看到回复了。

我正在开发一个平板电脑应用程序,需要使用Web API来获取数据库或在存储库中进行更新。

我的电话不会返回,并且Fiddler中没有一条跟踪来显示我的电话甚至到达服务器。

我需要做的第一个电话是登录。 URI将是:

http://localhost:53060/api/user

此调用通常会返回有关用户的一些信息(例如组成员身份,授权级别等)。 Web API使用Windows身份验证,因此存储库能够根据传入的凭据解析所有这些字段。正如我所说,在Fiddler中,我看到对URI的三次调用,因为身份验证是在调用者和服务器之间协商的。第三个调用返回一个JSON对象,该对象包含按预期方式从存储库生成的所有信息。

现在,转到我的客户,我有以下内容:

var webApiClient = new HttpClient(new HttpClientHandler()
                                  {
                                     UseDefaultCredentials = true
                                  })
                   {
                      BaseAddress = new Uri("http://localhost:53060/")
                   };

webApiClient.DefaultRequestHeaders.Accept.Add(new   MediaTypeWithQualityHeaderValue("application/json"));

HttpResponseMessage response = await webApiClient.GetAsync("api/user");
var userLoginInfo = await response.Content.ReadAsAsync<UserLoginInformation>();

我打电话给&#34; GetAsync&#34;永远不会回来,就像我说的那样,我在Fiddler看不到任何痕迹。

知道我做错了什么?

TIA, 艾德

1 个答案:

答案 0 :(得分:0)

更改Web API所暴露的URL似乎解决了问题。感谢@Nkosi的建议。 对于任何绊到这个问题并且问自己如何更改Web API的URL的人来说,有两种方法。如果模拟器与Web API在同一台计算机上运行,​​则必须在IIS Express的“applicationhost.config”文件中进行更改。您可以通过右键单击通知区域(右下角)中的IIS Express图标并选择显示所有网站来找到此文件。突出显示所需的Web API,它将显示应用程序主机配置文件的位置。在那里,需要找到以下部分:

<bindings>
   <binding protocol="http" bindingInformation="*:53060:localhost" />
</bindings>

并将“localhost”名称替换为运行Web API的计算机的IP地址。

但是,一旦您开始使用真实设备测试平板电脑应用,此方法将无效。必须强制IIS Express将Web API暴露给外部世界。我找到了一个优秀的node.js包,可以帮助解决这个问题。它被称为IISExpress-proxy