通过Windows Task Scheduler和HttpClient调用运行的.NET Core 2.1控制台应用程序导致401

时间:2018-12-13 20:38:39

标签: asp.net iis asp.net-core .net-core asp.net-core-2.1

在将应用程序从.NET Core 1.0.1升级到.NET Core 2.1时遇到了一个问题。这是一个通过Windows Task Scheduler运行的控制台应用程序,该应用程序调用在同一服务器上的IIS中托管的一组Web服务。升级后,尝试在主机上运行它时,它在第一个API调用上失败,并返回401。IIS被设置为接受带有协商和NTLM提供程序的匿名身份验证和Windows身份验证。任务计划程序设置控制台应用程序应使用的用户。进行第一次API调用的代码如下:

using (var handler = new HttpClientHandler())
{
   handler.UseDefaultCredentials = true;

   var client = new HttpClient(handler);
   client.DefaultRequestHeaders.Accept.Clear();
   var result = await client.GetStringAsync(myUrlString);
   return Newtonsoft.Json.JsonConvert.DeserializeObject<List<MyResponseObject>>(result);
 }

我也已经将API项目升级到.NET Core 2.1,但我尝试在以2.1的身份运行控制台应用程序时还原回1.0.1版本(相反,以2.1的版本运行API和以1.0的版本运行控制台应用程序.1也可以),以确保它是有问题的控制台应用程序。

从本地主机运行且使用IIS Express本地托管的API时,控制台应用程序运行良好。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

尝试一下。它适用于我们的客户应用程序。

client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders
      .Accept
      .Add(new MediaTypeWithQualityHeaderValue("application/json"));

答案 1 :(得分:0)

几周前,当我从.NET Framework 4.6.x迁移到.NET Core 2.1时,也遇到了类似的问题。该问题可能与.NET Core 2.1中实现的新HttpHandler有关。此处理程序存在各种问题(例如this)。即使此特定错误可能并不完全相关,但那里描述的解决方法可能会有所帮助:

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);