我有一个正常运行的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, 艾德
答案 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。