C# WPF应用程序访问Web API的奇怪行为
我有一个WPF应用程序,我用它从Web API中提取数据 登录后,我存储令牌,并基于此可以访问API或不访问API 案例1:登录,获取令牌,点击按钮获取数据:C# WPF应用程序访问Web API的奇怪行为,c#,wpf,api,C#,Wpf,Api,我有一个WPF应用程序,我用它从Web API中提取数据 登录后,我存储令牌,并基于此可以访问API或不访问API 案例1:登录,获取令牌,点击按钮获取数据: private async void button1_Click(object sender, RoutedEventArgs e) { getMovies(); } 实现的方法 private void getMovies() { var accessToken = token; HttpClient clie
private async void button1_Click(object sender, RoutedEventArgs e)
{
getMovies();
}
实现的方法
private void getMovies()
{
var accessToken = token;
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
client.BaseAddress = new Uri("http://localhost:5001/movies/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.GetAsync("get").Result;
if (response.IsSuccessStatusCode)
{
MessageBox.Show(response.Content.ReadAsStringAsync().Result);
}
else
{
MessageBox.Show("Movies not Found");
}
}
我收到了401
案例2:我从Start方法调用API(与上面的代码相同):从API获取数据
public async void Start(object sender, RoutedEventArgs e)
{
getMovies();
}
这怎么可能?如何在
Start
方法之外访问API?应该首先重构该方法,以遵循通常建议的语法
string baseUrl = "http://localhost:5001/movies/"
private async Task getMoviesAsync() {
var accessToken = token; //assuming token is being retrieved and set somewhere else
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);
client.BaseAddress = new Uri(baseUrl);
client.DefaultRequestHeaders.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.GetAsync("get");
if (response.IsSuccessStatusCode) {
MessageBox.Show( await response.Content.ReadAsStringAsync());
} else {
MessageBox.Show("Movies not Found");
}
}
并呼吁如下
private async void button1_Click(object sender, RoutedEventArgs e) {
await getMoviesAsync();
}
通常不建议在每次通话时创建
HttpClient
,但这与当前的问题无关。你是对的,我只是用我最新版本的代码编辑了我的帖子。好吧,让我们看看我们是否可以缩小实际问题的范围,并从那里开始工作,因为问题在当前状态下仍然有点混乱。两个调用是否使用了相同的令牌?是的,我检查了,是sameThank you!我仍然不熟悉桌面应用程序,但你的回答解决了我的问题。