2016-07-28 7 views
0

晴れのモバイルサービスから晴天のWebアプリケーションにアプリケーションを移植しようとしています。 (モバイルサービスが機能していた)。 web-appにmicrosoftアカウント認証を追加し、webapp apiにMobileAppController属性を追加しました。私はAPIを呼び出すユニバーサルWindowsアプリのフロントエンドを持っています。アプリは最初にプレーヤーがデータベースに入っているかどうかをチェックし、そうでなければレスポンスが見つからない。 MobileServiceClientで次のコードを使用してメソッドを呼び出すと、例外が発生します。 //クライアント応答が見つからないときにモバイルサービスクライアントが例外をスローする

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

私は404が発見されていない応答を得ることはありません正しく //ログインしているMobileServiceClientですが、私は VAR応答例外を「要求が見つかりません、完了できませんでした」取得=クライアントを待ちます.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 =ロス・アンヘレス・ドジャース はあなたのチェイス・アトリーオブジェクトを与える必要があります。 (あなたはMicrosoftアカウントにログインするよう求められます)。

私の質問:1.実行の代わりに応答を得るためにmobileclientコールを修正することはできますか 2.これに多くの時間を費やしている理由はありますか?

答えて

1

例外を調べると、ステータスコードがそこにあることに気づくでしょう - それはただシリアル化されていないプロパティにあります。あなたのInvokeApiAsync()呼び出しをtry/catchで囲み、StatusCodeをテストしてください。同じ目的のために独自のHTTP Clientコードを書くよりもずっと簡単になるはずです。

特に、MobileServiceInvalidOperationExceptionには、失敗した要求のHttpResponseが含まれているため、exception.Response.StatusCodeの値を確認できます。

+0

上記の作業は大丈夫ですが、原則です。なぜ私はhttpresponseを要求しているときに例外を取得する必要がありますか?私は、例外を得るのに直感的ではないように見えます。 –

関連する問題