2016-07-28 51 views
0

我试图将应用程序从天蓝色的移动服务移植到天蓝色的Web应用程序。 (移动服务正在工作)。我已将微软帐户身份验证添加到Web应用程序,并且Web应用程序API具有MobileAppController属性。我有一个调用API的通用Windows应用程序前端。应用程序首先检查一个玩家是否在数据库中,如果没有,我会得到一个未找到的响应。如果我使用MobileServiceClient使用以下代码调用方法,则会发生异常。移动服务客户端在未找到响应时抛出异常

private async Task<HttpResponseMessage> GetAZMAsyncP(string apiext, IDictionary<string,string> param) 
    { 
     string myuri = String.Format("{0}{1}", urlbase, apiext); 

//客户端是在 正确记录的MobileServiceClient //我没有得到响应是404没有找到,我得到一个异常“的请求无法完成,未找到” VAR响应= await client.InvokeApiAsync(myuri,System.Net.Http.HttpMethod.Get,param); 返回响应; } 如果我从一个httpclient调用api并添加我自己的头文件,这是移动客户端应该为我做的,那么我会根据请求得到响应。这里是代码:

private async static Task<HttpResponseMessage> GetAZAsync(string apiext) 
    { 

     string completeUrl = String.Format("{0}{1}", urlbase, apiext); 


     // Call out to AZ 
     using (var http = new HttpClient()) 
     { 

     // http.BaseAddress = new Uri(completeUrl); 
     HttpRequestMessage rq = new HttpRequestMessage() 
     { 
      RequestUri = new Uri(completeUrl), 
      Method = HttpMethod.Get 
     }; 
      addauthheader(rq); 

      var response = await http.SendAsync(rq); 
      return response; 
     } 
    } 
private static void addauthheader(HttpRequestMessage rq) 
    { 
     MobileServiceUser user = App.client.CurrentUser; 
     rq.Headers.Add("X-ZUMO-FEATURES", "AT,QS");      
     rq.Headers.Add("X-ZUMO-INSTALLATION-ID", 
      "ff90f37e-0c03-4c52-a343-af711752e383"); 
     rq.Headers.Add("X-ZUMO-AUTH", user.MobileServiceAuthenticationToken); 
     rq.Headers.Add("Accept", "application/json"); 
     rq.Headers.Add("User-Agent", "ZUMO/2.1"); 
     rq.Headers.Add("User-Agent", 
      "(lang = Managed; os = Windows Store; os_version = --; arch = X86; version = 2.1.40707.0)"); 
     rq.Headers.Add("X-ZUMO-VERSION", 
      "ZUMO/2.1(lang = Managed; os = Windows Store; os_version = --; arch = X86; version = 2.1.40707.0)"); 
     rq.Headers.Add("ZUMO-API-VERSION", "2.0.0"); 
       } 

你可以试试这个,因为它是现场(和越野车)。
https://gamenote2.azurewebsites.net/api/Players?displayname=Paul施密特& teamid =亚利桑那州响尾蛇 应该给你一个404, https://gamenote2.azurewebsites.net/api/Players?displayname=Chase厄特利& teamid =洛杉矶 - 洛杉矶 - 道奇 应该给你一个蔡斯·阿特利对象。 (YOu将被要求登录到Microsoft帐户)。

所以我的问题:1.我可以修复mobileclient调用来获得响应而不是执行 2.是否有任何理由让我花这么多时间在这个上。

回答

1

如果你检查异常,你会注意到状态码在那里 - 它只是在一个没有序列化的属性中。只需用try/catch包围InvokeApiAsync()调用并测试StatusCode即可。它应该比为自己的目的编写自己的HTTP客户端代码容易得多。

具体而言,MobileServiceInvalidOperationException包含失败请求的HttpResponse,因此您可以检查exception.Response.StatusCode值。

+0

上面的工作是可以的,但原则上。为什么当我要求httpresponse时应该得到异常?在我看来,直觉得到异常。 –

相关问题