You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin Forms iOS登录后获取Token并添加至API请求授权头

Xamarin Forms iOS 给API请求添加Authorization头步骤

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:01:50