Xamarin Forms iOS登录后获取Token并添加至API请求授权头
1. 持久化存储登录获取的Token
登录成功拿到Token后,用Xamarin.Essentials的Preferences把Token存在本地,方便后续请求调用:
// 登录成功后保存Token Preferences.Set("AuthToken", loginResponse.Token);
2. 封装API请求工具类,自动添加Authorization头
不要每次请求都手动写头,封装一个工具类统一处理,示例如下:
using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; using Newtonsoft.Json; using Xamarin.Essentials; public class PurchaseApiService { private readonly HttpClient _httpClient; public PurchaseApiService() { _httpClient = new HttpClient(); // 设置API基础地址,减少重复写URL _httpClient.BaseAddress = new System.Uri("https://your-api-domain.com/api/"); } public async Task<List<PurchaseModel>> GetPurchaseListAsync() { // 从本地取出Token var authToken = Preferences.Get("AuthToken", string.Empty); if (string.IsNullOrWhiteSpace(authToken)) { // 处理未登录情况,比如导航到登录页面 return null; } // 添加Authorization头,格式一般是Bearer + Token _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authToken); var response = await _httpClient.GetAsync("purchases"); if (response.IsSuccessStatusCode) { var responseContent = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject<List<PurchaseModel>>(responseContent); } else if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized) { // Token过期或无效,清除本地Token并跳登录 Preferences.Remove("AuthToken"); // 导航到登录页示例: // await App.Current.MainPage.Navigation.PushAsync(new LoginPage()); return null; } // 其他错误情况处理 return null; } }
3. 调用封装好的服务获取采购清单
在页面ViewModel或代码后台直接调用这个服务类即可:
var purchaseService = new PurchaseApiService(); var purchaseList = await purchaseService.GetPurchaseListAsync(); if (purchaseList != null) { // 将采购清单绑定到UI控件 PurchaseListView.ItemsSource = purchaseList; }
关键注意点
- 确保Token格式和后端要求一致,大部分后端要求
Bearer {Token}格式,需和后端确认前缀 - 处理
401 Unauthorized响应:返回该状态码时说明Token失效,需清除本地Token并引导用户重新登录 - 建议复用
HttpClient实例,不要每次请求都新建,避免性能问题
内容的提问来源于stack exchange,提问作者danielpr
相关产品推荐
相关产品推荐

