Windows phone 7 WP7设备+;Windows 8.1+;VS 2012+;Asp.net Web Api-如何让设备与Web Api对话?
我现在使用的是Windows 8.1和VS 2012。我在Windows Phone应用程序中使用Web api后端完成所有繁重的工作。但是,当我通过模拟器运行我的应用程序时,对本地运行的web api的所有请求都被拒绝 我发现仿真器无法解析localhost。在做了一些非常类似于模拟器的事情之后,我能够在Windows8模拟器上运行,没有问题 然而,我现在需要在我的实际设备上测试它来使用相机,但是我遇到了与模拟器相同的问题。我无法与本地web api通信 我在Windows7和VS2010上时没有遇到任何问题。我只是使用了文章中的步骤,没有任何问题 当我尝试从我的设备请求web api时(设备通过计算机通过usb连接)出现此错误Windows phone 7 WP7设备+;Windows 8.1+;VS 2012+;Asp.net Web Api-如何让设备与Web Api对话?,windows-phone-7,visual-studio-2012,windows-phone-8,asp.net-web-api,windows-8.1,Windows Phone 7,Visual Studio 2012,Windows Phone 8,Asp.net Web Api,Windows 8.1,我现在使用的是Windows 8.1和VS 2012。我在Windows Phone应用程序中使用Web api后端完成所有繁重的工作。但是,当我通过模拟器运行我的应用程序时,对本地运行的web api的所有请求都被拒绝 我发现仿真器无法解析localhost。在做了一些非常类似于模拟器的事情之后,我能够在Windows8模拟器上运行,没有问题 然而,我现在需要在我的实际设备上测试它来使用相机,但是我遇到了与模拟器相同的问题。我无法与本地web api通信 我在Windows7和VS2010上时
错误的请求
错误的请求-无效的主机名
HTTP错误400。请求主机名无效
我需要设置什么才能让它工作
编辑
我仍然有这个问题。我已经能够让WindowsPhone8模拟器工作,但仍然无法让我的WP7设备能够与本地Web Api通信
示例代码
我会这样做的
public class CourseService
{
public const string webApiUrl = "http://localhost:4372/api/values";
RestClient client = new RestClient(webApiUrl);
public void GetCourses(Action successCallback, Action<string> errorCallBack, bool forceError = false)
{
var request = new RestRequest(Method.GET);
client.ExecuteAsync(request, response =>
{
if (forceError)
{
errorCallBack("Failed");
}
else
{
if (response.StatusCode == HttpStatusCode.OK)
{
successCallback();
}
else
{
errorCallBack("Failed");
}
}
});
}
}
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
公共类课程服务
{
公用常量字符串webapirl=”http://localhost:4372/api/values";
RestClient=newrestclient(webapirl);
public void GetCourses(操作成功回调、操作错误回调、bool forceError=false)
{
var请求=新的重新请求(Method.GET);
client.ExecuteAsync(请求、响应=>
{
如果(强制错误)
{
错误回调(“失败”);
}
其他的
{
if(response.StatusCode==HttpStatusCode.OK)
{
successCallback();
}
其他的
{
错误回调(“失败”);
}
}
});
}
}
公共类值控制器:ApiController
{
//获取api/值
公共IEnumerable Get()
{
返回新字符串[]{“value1”,“value2”};
}
}
- 我尝试了localhost(从我所读到的内容知道它不起作用)
- 我尝试了我的计算机ip地址
- 试图在应用程序配置中放入IIS Express以使用ip地址
- 您的404显示的主机名无效。也许您必须遵循简单描述的步骤:将机器名称添加到web服务的配置中。它是关于Windows Phone 8的,但可能也适用于Windows Phone 7。您没有发送请求详细信息,但从设备上呼叫本地主机是没有意义的。您需要连接到远程计算机,这是您的电脑名或IP
如果你仍然无法使用IP访问该站点,我会尝试在WP7上安装Fiddler,以便更好地了解正在发生的事情 如何运行webapi?使用IIS Express 还是用IIS?您还将遇到CORS问题。是webapi 1还是webapi 2 您可能需要此nuget软件包: 在Webapi2中阅读有关CORS(跨来源资源共享)支持的更多信息,请点击此处:
如果这些指针对您没有帮助,我希望看到一些调用webapi和webapi构造函数和数据注释的代码请检查C:\Windows\System32\drivers\etc\hosts中的配置,您也可以尝试在IE Internet属性中操作LAN设置 选中“作为专用自动配置”部分,然后自动检测设置您需要执行此操作
<bindings>
<binding protocol="http" bindingInformation="*:55210:localhost" />
<binding protocol="http" bindingInformation="169.254.80.80:55210:" />
</bindings>
而不是这个
<bindings>
<binding protocol="http" bindingInformation=":55210:localhost" />
<binding protocol="http" bindingInformation=":55210:169.254.80.80" />
</bindings>
另外,使用“管理”选项启动visual。。。iis express就是这样工作的,这是一个安全问题。对于WP7,我建议检查我在如何编写代码方面没有问题,我对他们在本地交谈有问题。我有一个功能齐全的应用程序。我只是缺少一些东西,可以让我将设备插入计算机,运行本地asp.net web api副本,让设备和web api在本地相互通信。以下内容可能有助于尝试禁用本地计算机的防火墙,并尝试通过IP地址/URL连接您的web api。。。这样行吗?是的,我试过禁用我的防病毒和windows防火墙。在我的本地机器上,使用ip地址可以工作。然后我复制了相同的url,并通过浏览器在手机上尝试,但得到了404。当我再次尝试时,我收到了一个错误的请求。我看到了那篇文章,但我不清楚当我启动VS时会发生什么(它会显示localhost吗?),我不清楚我将在WP7浏览器中使用什么作为链接。有了ip,我在关闭zune后取得了一些成功,但当它打开时失败了。是的,我使用的是IIS express,并且几乎做到了这一点(当我使用VS 2010和WP&时效果很好)。我正在使用webapi 1,不知道CORS是什么。我想我可以得到一些代码。好的,我添加了一些示例代码,说明如何调用我的webapi服务。
<bindings>
<binding protocol="http" bindingInformation=":55210:localhost" />
<binding protocol="http" bindingInformation=":55210:169.254.80.80" />
</bindings>