我正在为该应用编写Windows Phone 8.1移动应用程序和数据源是Azure移动服务。
自从过去两天以来,我的登录功能停止了工作。现在它正在抛出请求无法完成。 (未经授权)错误。
我没有对登录服务如何停止进行任何更改感到惊讶?其他服务仍在运作。
填写错误堆栈跟踪:
请求无法完成。 (未授权)
{Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: 请求无法完成。 (未经授权)在 Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.d__18.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.d__1d.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient.<RequestAsync>d__4.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult() 在 Microsoft.WindowsAzure.MobileServices.MobileServiceClient.d__b.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at Microsoft.WindowsAzure.MobileServices.MobileServiceClient.<InvokeApiAsync>d__0
2.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在MYAPP.SignIn.d__1.MoveNext()}
我的呼叫登录服务代码是:
var client = new MobileServiceClient("https://<My-Azure-Service>.azure-mobile.net/", "***KEY***");
var myLogin = new LoginRequest
{
UserName = "username",
Password = "password",
DeviceToken = deviceID,
OSVersion = "WP 8",
AppVersion = "The major & minor version",
DeviceModel = "WP",
DeviceTypeID = 3
};
var loginResult = await client.InvokeApiAsync<LoginRequest, LoginResponse>("user/loguserin", myLogin, HttpMethod.Post, null);
请帮我解决这个问题。
答案 0 :(得分:1)
未经授权的错误来自服务器,这可能是由于a)API的授权问题,或b)API代码中的问题。
后者是您必须与客户合作的事情。由于代码正在执行登录,因此很多情况可能会导致401 Unauthorized。这不是标准的移动服务登录功能,您的客户端可以控制执行的代码以及此时返回的错误。
谈到API的授权问题,移动服务允许API开发人员限制访问以下四个级别之一:
***KEY***
的值。此密钥附加到对移动服务的所有请求如果API设置为其中之一,并且来自设备的呼叫不符合要求,则将返回401。您应该咨询您的客户,以了解他们将登录API设置为的授权级别。
很难说为什么这适用于iPhone / Android但不适用于WP。假设服务器代码没有问题,我会怀疑密钥不匹配问题(可能是某些设备代码库更新了密钥而不是其他设备代码库)或令牌验证问题。此登录调用可能附加了已过期的旧令牌。请检查是否是这种情况 - 使用Fiddler或类似的跟踪可以帮助您跟踪此情况。您甚至可以使用它来比较来自Android的呼叫。您还可以提前使用client.Logout()
以确保没有令牌发送到登录端点。