我有一个与API通讯的Xamarin应用。与API通讯时,在某些情况下会返回401(未授权)异常。当用户帐户变为非活动状态时,将有意返回此401(未经授权),因此,即使用户令牌在应用程序上仍然有效,他们也无法从API取回任何数据。
仅当引发401(未经授权)异常时,我才希望能够使用户退出应用程序。
我的API调用如下:
public async Task<T> GetAsync<T>(string url)
{
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _authToken?.AccessToken ?? this.GetToken().AccessToken);
var json = await _client.GetStringAsync(url);
return json.Deserialize<T>();
}
当调试器到达var json = await _client.GetStringAsync(url);
行时,将正确引发401(未经授权)异常。
我希望能够处理此401(未授权)异常并将用户注销到应用程序之外(最好是通过警报通知他们)。
我目前正在Android设备上调试,因此我尝试将以下代码添加到MainActivity
类中。
protected override async void OnCreate(Bundle bundle)
{
AndroidEnvironment.UnhandledExceptionRaiser += AndroidEnvironmentOnUnhandledException;
}
private void AndroidEnvironmentOnUnhandledException(object sender, RaiseThrowableEventArgs e)
{
if(e.Exception.InnerException.GetBaseException().Message == "401 (Unauthorized)")
{
}
}
引发错误时,我检查其是否为401(未授权)。正是在这里,我以为我会将用户从应用程序中注销,但我认为这不是正确的方向。
是否存在处理我尚不了解的这种情况的最佳实践?
答案 0 :(得分:1)
您可以尝试使用projectVector.project(camera);
var inFrontOfCamera = projectVector.z < 1;
来扭曲try catch
,就像下面的代码一样。
var json = await _client.GetStringAsync(url)