gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:52:54 26 4
gpt4 key购买 nike

我有一个与API通讯的Xamarin应用。与API通讯时,在某些情况下会返回401(未授权)异常。当用户帐户变为非 Activity 状态时,将有意返回此401(未经授权),因此即使用户 token 在应用程序上仍然有效,他们也无法从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(未授权)。我以为我会在那时将用户从应用程序中注销,但我认为这不是正确的方向。

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

最佳答案

您可以尝试使用try catch来扭曲var json = await _client.GetStringAsync(url),如以下代码所示。

 try
{
var json = await _client.GetStringAsync(url)
}
catch (WebException e)
{
using (WebResponse response = e.Response)
{
HttpWebResponse httpResponse = (HttpWebResponse)response;
Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
using (Stream data = response.GetResponseStream())
using (var reader = new StreamReader(data))
{
// text is the response body
string text = reader.ReadToEnd();

if (text == "401 (Unauthorized)")
{


}
}
}
}

关于api - 401未经授权响应时Xamarin注销用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54145527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com