从Azure Function

时间:2018-11-28 03:48:00

标签: c# .net-core azure-functions dotnet-httpclient http2

我正在使用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有使其变通的变通办法?

2 个答案:

答案 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