c# - 可以将哪些类型作为参数传递给仅限管理员的 C# Azure Function 应用程序?

标签 c# azure azure-functions

哪些类型可以作为用 C# 编写且只能通过管理端点调用的 Azure Function 应用的参数?

我读了很多文档和源代码,但我仍然不知道答案。我正在寻找关于其含义和原因的明确引用和清晰解释,以及如何使用其他参数类型实现函数的示例。

我想知道 Azure 团队是否希望您接受 JSON 字符串并自行将其解析为正确的类型,但我找到的文档没有说明。

其他上下文

我正在开发的特定功能只能通过管理界面调用,因此没有任何 Http 等绑定(bind)。

[NoAutomaticTrigger]
[FunctionName(nameof(SomeFunctionName))]
public async Task SomeFunctionName(ParameterTypeHere someParameterName)
{
...

我可以用什么来代替 ParameterTypeHere

我(这次)的具体用途是我想传递类似 List<Guid> 的东西或Guid[] ,我不介意是否必须将它包装在一个类或其他东西中,但我尝试过的任何方法都不起作用,所以我最终用逗号分割了一个字符串并解析出了 guid,这似乎是一个糟糕的解决方案。

目前我有一个字符串参数并使用以下方式调用它:

$ curl -v http://localhost:7071/admin/functions/SomeFunctionName \
  -d '{"input": "699F3073-9BFD-4DA7-9E61-4E6564D032EC,197DA362-C281-4E0F-BB92-8759F7A5B4B4"}' \
  -H "Content-Type:application/json"

迄今为止的研究

我已经看过的东西让我仍然不确定除了 string 之外我还能使用什么对于更复杂的输入:

参数名称被忽略,无论实际参数名称是什么,都必须以名称“input”传入。又是一件事让人绊倒。

更多上下文

如果您想知道为什么您想要一个仅限管理的功能,那么这是一项由有权访问管理端点的其他人运行的一次性作业。这似乎是最简单可行的事情。安HttpTrigger本来就没问题,只是看起来违反了 YAGNI。

最佳答案

几周前,我测试了如何使用函数转换 API,特别注意 DI(下面的示例中未显示)和验证。这可能不是您问题的直接答案,但它表明可以使用普通模型类。

public class MyRequestModel
{
    [Display(Name = "Message")]
    [Required, MinLength(3)]
    public string Message { get; set; }
}

public static class MyHttpExample
{
    [FunctionName(nameof(MyHttpExample))]
    public static IActionResult Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = "test/{message}")] MyRequestModel req, ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        var validationResults = new List<ValidationResult>();
        if (!Validator.TryValidateObject(req, new ValidationContext(req, null, null), validationResults, true))
        {
            return new BadRequestObjectResult(validationResults);
        }

        var responseMessage = $"Hello, {req.Message}. This HTTP triggered function executed successfully.";
        return new OkObjectResult(responseMessage);
    }
}

有关Azure Functions 绑定(bind)表达式模式的更多信息 https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-expressions-patterns

阅读上述文档时,请记住 function.json 是使用 C# 时从注释生成的,但文档显示了可用的内容。为上面的示例生成 function.json:

{
  "generatedBy": "Microsoft.NET.Sdk.Functions-3.0.11",
  "configurationSource": "attributes",
  "bindings": [
    {
      "type": "httpTrigger",
      "route": "test",
      "methods": [
        "get"
      ],
      "authLevel": "function",
      "name": "req"
    }
  ],
  "disabled": false,
  "scriptFile": "../bin/MyFunctions.dll",
  "entryPoint": "MyFunctions.MyHttpExample.Run"
}

另请参阅https://stackoverflow.com/a/54489040/14072498

关于c# - 可以将哪些类型作为参数传递给仅限管理员的 C# Azure Function 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65669323/

相关文章:

c# - ArgumentException: 给定的端口名称不以 COM/com 开头或未解析为有效的串行端口

c# - 反序列化List Json C#中的List

azure - 是否有任何 Powershell 脚本或 az 命令可以获取用于 API 管理的产品及其订阅 ID 列表?

azure - 从 Azure Functions v2 配置 Twilio SMS

c# - Azure Function ServiceBusReceivedMessage ApplicatonProperties 为空

c# - 我应该将 SQL Server UNIQUEIDENTIFIER 检索到哪种 C# 数据类型?

c# - 认证2.0 |水疗 | id_token如何伪装成access_token来访问受限制的网络资源?

azure - Adal JS - 仅注销一个 AD 站点

azure - 在 Azure 存储帐户表中存储 API key /密码

azure - Azure 上 'Work pace based Application Insight' 的 Terraform 部署