401未经授权响应时,Xamarin注销用户

时间:2019-01-11 11:22:51

标签: api xamarin error-handling restful-authentication

我有一个与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(未授权)。正是在这里,我以为我会将用户从应用程序中注销,但我认为这不是正确的方向。

是否存在处理我尚不了解的这种情况的最佳实践?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用projectVector.project(camera); var inFrontOfCamera = projectVector.z < 1; 来扭曲try catch,就像下面的代码一样。

var json = await _client.GetStringAsync(url)