在将应用程序从.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时,控制台应用程序运行良好。
任何帮助将不胜感激!
答案 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);