【问题标题】:Mobile Service Client throws exception when response is not found未找到响应时,移动服务客户端引发异常
【发布时间】:2016-07-29 02:18:22
【问题描述】:

我正在尝试将应用程序从 azure 移动服务移植到 azure Web 应用程序。 (移动服务正在运行)。我已将 Microsoft 帐户身份验证添加到 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);

//client为正确登录的MobileServiceClient //我没有得到404未找到的响应,我得到一个异常“请求无法完成,未找到” var response = 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 Goldschmidt&teamid=arizona-diamondbacks 应该给你一个404, https://gamenote2.azurewebsites.net/api/Players?displayname=Chase Utley&teamid=los-angeles-dodgers 应该给你一个追逐 utley 对象。 (您将被要求登录 Microsoft 帐户)。

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

【问题讨论】:

    标签: c# azure-mobile-services windows-10-universal


    【解决方案1】:

    如果您检查异常,您会注意到状态代码在其中 - 它只是在未序列化的属性中。只需在您的 InvokeApiAsync() 调用中加上 try/catch 并测试 StatusCode。这应该比为相同目的编写自己的 HTTP 客户端代码要容易得多。

    具体MobileServiceInvalidOperationException包含了失败请求的HttpResponse,可以查看exception.Response.StatusCode的值。

    【讨论】:

    • 上述解决方法可以,但原则上。为什么我在请求 httpresponse 时会遇到异常?在我看来,获得例外是违反直觉的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多