如何从 C# WinForms 应用程序调用 Web 处理程序

问题描述 投票:0回答:1

我正在编写一个 C# Winforms 应用程序,该应用程序需要能够调用位于由 ASP.NET 身份验证保护的目录内的 ASP.NET Web 处理程序。我找不到在调用 Web 处理程序时如何将凭据发送到 Web 处理程序的清晰示例。我正在使用以下代码来调用 Web 处理程序,但返回的响应显示它正在被重定向到站点登录页面,因为我没有发送登录凭据

HttpClient client=new HttpClient();
client.BaseAddress = new Uri ( "https://[my site url].com/administration/handlers/gettodaystats.ashx" );
            client.DefaultRequestHeaders.Accept.Clear ( );
            client.DefaultRequestHeaders.Accept.Add (
                new MediaTypeWithQualityHeaderValue ( "application/json" ) );

            var response = client.GetAsync("https://[my site url].com/administration/handlers/gettodaystats.ashx");
            if ( response.Result.StatusCode == System.Net.HttpStatusCode.OK ) {
                var content = response.Result.Content.ReadAsStringAsync();
                var stats = JsonConvert.DeserializeObject<List<SiteStats>>(content.ToString());
                MessageBox.Show ( stats.Count.ToString("N0") );
            }

如果我将 Web 处理程序移至安全目录之外,则此代码可以正常工作。我需要向 HttpClient 添加什么来包含凭据,以便我可以将 Web 处理程序保留在安全目录中?

c# winforms dotnet-httpclient httphandler
1个回答
0
投票

如果您已有身份验证令牌,则此方法有效。如果没有,请研究如何使用 HttpClient 处理基本身份验证。

            byte[] imageData = null;
       HttpClient client = new HttpClient();
        try
        {
            //using (HttpClient client = new HttpClient())
            //{
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "Bearer " + AccessToken);
            imageData = await client.GetByteArrayAsync(URL);
}
© www.soinside.com 2019 - 2024. All rights reserved.