我正在使用HttpClient将Apple推送通知发送到APN HTTP / 2服务器。我已经通过使用System.Net.Http.WinHttpHandler
nuget包使其工作:
var http = new HttpClient(new WinHttpHandler());
var request = new HttpRequestMessage(HttpMethod.Post, new Uri(url))
{
Version = new Version(2, 0),
Content = new StringContent(json)
};
// Set headers... Send... Read response... HTTP 200 OK
这在Windows上很好用。问题是,其他任何地方均不支持WinHttpHandler。例如,我无法从Azure Functions运行此代码。我的问题是-是否有使用.NET Core 2.1发送HTTP / 2请求的任何跨平台方式,或者Azure Functions 2.0有使其变通的变通办法?
答案 0 :(得分:1)
我在Azure Functions 2.0上使用WinHttpHandler遇到问题。我已经使用here中的解决方法设法解决了该问题。基本上,我将.NET Standard 2.0 System.Net.Http.WinHttpHandler.dll程序集放到功能项目的根目录中,并添加以下内容:
<ItemGroup>
<None Update="System.Net.Http.WinHttpHandler.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<Target Name="CopySPSM" BeforeTargets="Build">
<Copy SourceFiles="System.Net.Http.WinHttpHandler.dll" DestinationFolder="$(OutputPath)\bin" />
</Target>
以此为基础,并设置WEBSITE_LOAD_USER_PROFILE = 1以使CngKey.Import
能够对AWT的JWT令牌进行签名。
答案 1 :(得分:0)
当您以.NET Core 2.1为目标并发出HTTP / 2请求时,它将降级为HTTP / 1.1。 您可以将.NET Core 2.1切换到其他HTTP堆栈。并且 .Net Core 2.1当前不支持HTTP / 2.0 。
因此,我建议您可以切换回较旧的堆栈,并支持HTTP / 2.0。有关更多详细信息,请参阅此issue。