首页 文章

functions.json由Azure函数忽略的graphToken绑定

提问于
浏览
1

我在名为'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但是我得到的只是这个错误:

JobHost.cs中的Microsoft.Azure.WebJobs.JobHost.Validate(IFunctionDefinition函数,对象键)在JobHost.cs中的Microsoft.Azure.WebJobs.JobHost d__36.MoveNext()System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()System . Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)ScriptHost.cs中的Microsoft.Azure.WebJobs.Script.ScriptHost d__86.MoveNext()System.Runtime.ExceptionServices.ExceptionDispatchInfo . Throw()System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)Microsoft.Azure.WebJobs.Script.WebHost.Middleware.FunctionInvocationMiddleware d__4.MoveNext()在FunctionInvocationMiddleware中 . cs System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)System.Runtime.CompilerServices .TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)Microsoft.Azure.WebJobs.Script.WebHost.Middleware.FunctionInvocationMiddleware d__3.MoveNext()in FunctionInvocationMiddleware.cs System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (任务任务)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)System.Runtime.CompilerServices.TaskAwaiter.GetResult()Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware d__7.MoveNext()

所以我尝试禁用该功能并再次从VSCode构建/上传azure函数,但我仍然可以访问该函数,使我相信函数.json被忽略 .

1 回答

  • 1

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

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

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

    在C#类库中,使用Token属性,该属性在NuGet包Microsoft.Azure.WebJobs.Extensions.AuthTokens中定义 .

相关问题