无法使用RestSharp,寻求其他通过Bearer Token调用API的方案
替代RestSharp的Bearer Token API调用方案
我需要通过GET/POST调用API,已经实现了可正常运行的RestSharp版本,但该库与应用其余部分不兼容无法使用。我的Token为固定字符串(永不过期),已尝试过HttpClient方式,现寻求其他可使用Bearer Token调用API的方法。
已实现的RestSharp代码示例:
using System; using RestSharp; namespace HelloWorldApplication { class HelloWorld { static void Main(string[] args) { var client = new RestClient("https://test.com/api/"); client.Timeout = -1; var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer myToken"); IRestResponse response = client.Execute(request); Console.WriteLine(response.Content); } } }
尝试过的HttpClient代码示例:
static async Task Main(string[] args) { var endpoint = new Uri("https://test.com/api/"); HttpClient httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded")); httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "myToken"); var result = httpClient.GetAsync(endpoint).Result; var json = result.Content.ReadAsStringAsync().Result; Console.WriteLine(json); }
替代方案
1. 使用HttpWebRequest(同步调用)
适合需要同步执行的场景,无需额外依赖:
using System; using System.IO; using System.Net; namespace ApiCallExample { class Program { static void Main(string[] args) { var url = "https://test.com/api/"; var request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; request.Headers.Add("Authorization", "Bearer myToken"); request.Accept = "application/x-www-form-urlencoded"; try { using (var response = (HttpWebResponse)request.GetResponse()) using (var stream = response.GetResponseStream()) using (var reader = new StreamReader(stream)) { var content = reader.ReadToEnd(); Console.WriteLine(content); } } catch (WebException ex) { Console.WriteLine($"请求失败:{ex.Message}"); } } } }
2. 优化版HttpClient异步调用
避免使用.Result阻塞线程,采用标准异步写法:
using System; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; namespace ApiCallExample { class Program { static async Task Main(string[] args) { var endpoint = new Uri("https://test.com/api/"); // 建议复用HttpClient实例,避免频繁创建 using var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded")); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "myToken"); try { var result = await httpClient.GetAsync(endpoint); result.EnsureSuccessStatusCode(); // 抛出非2xx状态码异常 var json = await result.Content.ReadAsStringAsync(); Console.WriteLine(json); } catch (HttpRequestException ex) { Console.WriteLine($"请求失败:{ex.Message}"); } } } }
3. 使用WebClient(适用于.NET Framework)
轻量级同步请求方式:
using System; using System.Net; namespace ApiCallExample { class Program { static void Main(string[] args) { var url = "https://test.com/api/"; using var client = new WebClient(); client.Headers.Add("Authorization", "Bearer myToken"); client.Headers.Add("Accept", "application/x-www-form-urlencoded"); try { var content = client.DownloadString(url); Console.WriteLine(content); } catch (WebException ex) { Console.WriteLine($"请求失败:{ex.Message}"); } } } }
内容的提问来源于stack exchange,提问作者User_789465
相关产品推荐
相关产品推荐

