Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF应用程序访问Web API的奇怪行为_C#_Wpf_Api - Fatal编程技术网

C# WPF应用程序访问Web API的奇怪行为

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

我有一个WPF应用程序,我用它从Web API中提取数据

登录后,我存储令牌,并基于此可以访问API或不访问API

案例1:登录,获取令牌,点击按钮获取数据:

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!我仍然不熟悉桌面应用程序,但你的回答解决了我的问题。