WP7设备 + Windows 8.1 + VS 2012 + Asp.net Web Api - 如何让设备与Web Api进行通信?

28 浏览
0 Comments

WP7设备 + Windows 8.1 + VS 2012 + Asp.net Web Api - 如何让设备与Web Api进行通信?

我现在使用的是Windows 8.1和VS 2012。在我的Windows Phone应用程序中,我使用Web api后端来处理所有繁重的工作。然而,当我通过模拟器运行我的应用程序时,所有对我本地运行的web api的请求都被拒绝了。

我发现模拟器无法解析localhost。在这篇文章中,我做了一些非常模拟器的事情,然后就能够在Windows 8模拟器上运行没有问题。

然而,现在我需要在我的实际设备上进行测试以使用相机,但是我遇到了与模拟器相同的问题。我无法与我的本地web api进行通信。

当我尝试从设备(设备通过USB连接到计算机)向我的web api发送请求时,我会遇到这个错误:



  
    Bad Request
    
  
  
    

Bad Request - Invalid Hostname


HTTP Error 400. The request hostname is invalid.

我需要设置什么才能使其工作?

编辑

我仍然有这个问题。我已经能够使Windows Phone 8模拟器工作,但是仍然无法让我的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 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 Get()
        {
            return new string[] { "value1", "value2" };
        }
    }

  • 我尝试了localhost(从我读到的内容中知道它不会起作用)
  • 尝试了我的计算机IP地址
  • 尝试在应用程序配置中添加IIS Express的IP地址

    < bindings>

    < binding protocol="http" bindingInformation=":55210:localhost" />

    < binding protocol="http" bindingInformation=":55210:169.254.80.80" />

    < /bindings>

0
0 Comments

问题出现的原因:

- 使用IIS Express运行WebApi,可能会遇到外部访问的问题。

- 使用IIS运行WebApi,可能会遇到跨域资源共享(CORS)的问题。

- 使用WebApi 1版本,对CORS的支持有限。

解决方法:

- 安装Microsoft.AspNet.WebApi.Cors NuGet包,以解决CORS问题。

- 参考CORS在WebApi2中的支持文档,了解更多关于CORS的知识。

- 提供调用WebApi和构造函数以及数据注释的代码,以便其他人能够更好地理解问题。

示例代码:

// 调用WebApi的示例代码
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:port/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync("api/controller");
if (response.IsSuccessStatusCode)
{
    var data = await response.Content.ReadAsAsync();
    // 处理返回的数据
}

// WebApi构造函数和数据注释示例代码
public class MyApiController : ApiController
{
    private readonly IDataService _dataService;
    
    public MyApiController(IDataService dataService)
    {
        _dataService = dataService;
    }
    
    /// 
    /// 获取数据
    /// 
    /// 数据
    public IHttpActionResult GetData()
    {
        var data = _dataService.GetData();
        return Ok(data);
    }
}

以上是解决WP7设备无法与WebApi通信的原因和解决方法。

0
0 Comments

问题的原因是WP7设备无法与Web Api通信。解决方法是在Web服务的配置中添加机器的名称。可以参考这篇文章:http://www.informit.com/articles/article.aspx?p=2077111&seqNum=12。虽然文章是关于Windows Phone 8的,但是也可能适用于Windows Phone 7。

之前我看到过那篇文章,但是对于我启动VS时会发生什么不清楚(它会显示localhost吗?),也不确定在WP7浏览器中要使用什么链接。使用IP地址时,关闭Zune后可以有一些成功,但是在打开Zune时会失败。

0
0 Comments

问题出现的原因是在设备上调用本地主机是没有意义的,需要连接到远程机器,即您的PC名称或IP地址。

解决方法是使用Fiddler来监控Windows Phone 7上的网络请求。您可以在WP7上设置Fiddler,以更好地了解发生了什么。

以下是配置Fiddler和Windows Phone的步骤:

1. 下载并安装Fiddler(可以从这里下载)。

2. 在Windows Phone上打开Internet Explorer并输入“about:config”。

3. 在“IsolatedStorage”下,找到“ProxyOverride”或“ProxyBypass”键。

4. 将其设置为您PC的IP地址或主机名。

5. 在Fiddler中,启用“Tools”菜单下的“Gateway”选项。

6. 在Windows Phone上打开应用或浏览器,并尝试访问Web API。

通过这些步骤,您可以配置Fiddler来监控Windows Phone 7与Web API之间的通信,以便更好地理解问题所在。

0