从Azure功能对APN的HttpClient HTTP/2调用



我正在使用HttpClient向APN HTTP/2服务器发送Apple推送通知。我已经设法通过使用System.Net.Http.WinHttpHandlernuget包使其工作:

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函数运行此代码。我的问题是,是否有任何跨平台的方式发送HTTP/2请求使用。NET Core 2.1,或者Azure Functions 2.0有什么变通方法可以让它正常工作吗?

我在Azure Functions 2.0上使用WinHttpHandler时遇到问题。我已经设法从这里使用变通方法解决了这个问题。基本上是我说的。NET标准2.0系统。网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能够对APN的JWT令牌进行签名,它就开始工作了。

当你的目标。NET Core 2.1并发出HTTP/2请求时,它将降级为HTTP/1.1。你可以换。NET Core 2.1转换为不同的HTTP堆栈。和。Net Core 2.1目前不支持HTTP/2.0

因此,我建议您可以切换回支持HTTP/2.0的旧堆栈。有关更多详细信息,您可以参考此问题。

最新更新