我正在编写一个 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 处理程序保留在安全目录中?
如果您已有身份验证令牌,则此方法有效。如果没有,请研究如何使用 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);
}