【问题标题】:HttpRequest on Azure Function doesn't work with httpsAzure 函数上的 HttpRequest 不适用于 https
【发布时间】:2020-11-11 09:52:12
【问题描述】:

我创建了一个简单的 Azure 函数(Http 触发器),我想通过 C# 代码调用它。 我知道为了调用它,我必须使用 Azure 门户中显示的函数 URL 执行 http 请求。
但是,当 GetAsync( ...) 方法已达到。这是我的代码:

public static void Main(string[] args)
{
        AsyncMain();
        Console.ReadKey();
}

static async void AsyncMain()
{
        HttpResponseMessage response = await client.GetAsync("https://someapp.azurewebsites.net/api/somefunction?name=somevalue");
        response.EnsureSuccessStatusCode();
        string responseString = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseString);
}

当我将代码中的 URL 字符串从 https 更改为 http (http://someapp.azurewebsites[...]) 时,它工作正常。直接从浏览器窗口运行该功能时也没有任何错误。所以我怀疑我的请求有问题。

谁能告诉我如何使用从 Azure 门户获得的正确链接对我的函数执行 HTTPS 请求?
提前致谢!

【问题讨论】:

  • 尝试显式配置安全协议 - 在应用程序启动的某处添加此代码:ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
  • 这似乎已经解决了这个问题。谢谢杜桑!
  • 没问题。由于某种原因,某些环境/网络需要这样做......在其他情况下,它只是开箱即用。
  • 原因是 Azure Functions 使用 TLS 1.2,而您的项目可能针对默认为 TLS 1.0 的 .NET 4.5 或 4.6,因此握手失败。如果您重定向到 4.6.2+ 或直接到 .NET 5,则不需要额外的 ServicePointManager 配置。
  • 顺便说一句,在 C# 中现在有 4-5 年的 async Main 支持 - docs.microsoft.com/en-us/dotnet/csharp/language-reference/…

标签: c# azure https azure-functions httprequest


【解决方案1】:

将 cmets 总结为其他社区参考的答案:

在应用程序启动中添加代码ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;。因为 Azure Functions 使用 TLS 1.2,而您的项目可能针对默认为 TLS 1.0 的 .NET 4.5 或 4.6,所以握手失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2018-08-30
    • 1970-01-01
    相关资源
    最近更新 更多