【发布时间】: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