c# - Azure 函数忽略的functions.json graphToken 绑定(bind)

标签 c# json azure azure-functions

我在名为“TestMe”的文件夹中有一个函数,如下所示:

enter image description here

我可以在 VSCode 中构建项目并上传它,但 function.json 的内容似乎被忽略。

我的功能非常简单:

    [FunctionName("TestMe")]
    public static IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequest req, string graphToken, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = new StreamReader(req.Body).ReadToEnd();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        return name != null
            ? (ActionResult)new OkObjectResult($"Hello, {name}")
            : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
    }

和 function.json:

{
  "bindings": [
    {
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "type": "token",
      "direction": "in",
      "name": "graphToken",
      "resource": "https://graph.microsoft.com",
      "identity": "userFromRequest"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

我正在遵循指南 here我以为我可以得到一个 graphToken,但我得到的只是这个错误:

Microsoft.Azure.WebJobs.JobHost.Validate(IFunctionDefinition function, object key) in JobHost.cs Microsoft.Azure.WebJobs.JobHost+d__36.MoveNext() in JobHost.cs System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) Microsoft.Azure.WebJobs.Script.ScriptHost+d__86.MoveNext() in ScriptHost.cs System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) Microsoft.Azure.WebJobs.Script.WebHost.Middleware.FunctionInvocationMiddleware+d__4.MoveNext() in FunctionInvocationMiddleware.cs System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) Microsoft.Azure.WebJobs.Script.WebHost.Middleware.FunctionInvocationMiddleware+d__3.MoveNext() in FunctionInvocationMiddleware.cs System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) System.Runtime.CompilerServices.TaskAwaiter.GetResult() Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware+d__7.MoveNext()

因此,我尝试禁用该函数并再次从 VSCode 构建/上传 azure 函数,但我仍然可以访问该函数,这让我相信 function.json 被忽略了。

最佳答案

看起来您正在使用预编译的 C# 函数,这意味着您有一个 csproj 文件,并且您的函数被编译为 DLL,然后部署到 Azure。

在这种情况下,function.json 由 Functions SDK 自动生成,您不应对该文件进行任何手动更改。触发器将自动放置到 function.json 中,所有其他绑定(bind)都是从函数签名和属性中推断出来的。

因此,您应该将 Token 属性放在 graphToken 参数上,如所述 here :

In C# class libraries, use the Token attribute, which is defined in NuGet package Microsoft.Azure.WebJobs.Extensions.AuthTokens.

关于c# - Azure 函数忽略的functions.json graphToken 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48658544/

相关文章:

c# - MonoTouch : Where is Frame. 来源?

c# - 使用 CreateInstance 对表格单元格内容进行 Specflow 步骤参数转换

android - 使用 GSON 库从 URL(RESTful web 服务)解析 JSON 字符串。安卓

ios - 如何访问 '(String, JSON)' 中的 JSON

azure - FTP 到 Azure Blob 存储

c# - 覆盖 ASP.Net Core 中的 415 响应

c# - 在 ASP.NET Identity 2.0 中获取当前用户 ID

javascript - QT 可以转换为 JSON 的 QML/C++ 数据类型有哪些?

performance - Azure 流分析太慢 - 时间值也无关紧要

c# - Azure C# 函数中的 Appsettings.json 等效项