首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >您可以将哪些类型作为参数传递给仅限管理员的C# Azure函数应用程序?

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

Stack Overflow用户
提问于 2021-01-11 15:04:24
回答 1查看 602关注 0票数 4

哪些类型允许作为C#编写的Azure函数应用程序的参数,这些应用程序只能通过管理端点调用?

我读过很多文档和源代码,但我仍然不知道答案。我正在寻找明确的引用和关于这意味着什么和为什么的明确解释,以及如何用其他参数类型实现函数的例子。

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

附加上下文

我正在处理的特定功能只能通过管理界面调用,因此没有任何Http绑定。

代码语言:javascript
运行
复制
[NoAutomaticTrigger]
[FunctionName(nameof(SomeFunctionName))]
public async Task SomeFunctionName(ParameterTypeHere someParameterName)
{
...

我能用什么代替ParameterTypeHere

我的具体用法(这次)是,我想传递类似List<Guid>Guid[]之类的东西,我不介意必须将它包装在类或其他什么东西中,但是没有什么效果,所以我最终在逗号上拆分了一个字符串,并解析出了guids,这似乎是一个糟糕的解决方案。

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

代码语言:javascript
运行
复制
$ 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。

EN

回答 1

Stack Overflow用户

发布于 2021-01-11 15:56:48

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

代码语言:javascript
运行
复制
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函数绑定表达式模式 https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-expressions-patterns的更多信息

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

代码语言:javascript
运行
复制
{
  "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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65669323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档