我正在尝试将应用程序从azure移动服务移植到azure web应用程序。 (移动服务正在运行)。我已将微软帐户身份验证添加到Web应用程序,并且Web应用程序API具有MobileAppController属性。我有一个通用的Windows应用程序前端调用api。应用程序首先检查播放器是否在数据库中,如果不是,我会收到未找到的响应。如果我使用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&amp; teamid = arizona-diamondbacks 应该给你一个404, https://gamenote2.azurewebsites.net/api/Players?displayname=Chase Utley&amp; teamid = los-angeles-dodgers 应该给你一个追逐的对象。 (您将被要求登录Microsoft帐户)。
所以我的问题:1。我可以修复mobileclient调用来获取响应而不是execption 2.我有充分的理由在这上花这么多时间。
答案 0 :(得分:1)
如果检查异常,您会注意到状态代码在那里 - 它只是在未序列化的属性中。只需用try / catch包围你的InvokeApiAsync()调用并测试StatusCode。它应该比为同样的目的编写自己的HTTP客户端代码容易得多。
具体来说,MobileServiceInvalidOperationException
包含失败请求的HttpResponse,因此您可以检查exception.Response.StatusCode
值。