我在名为“TestMe”的文件夹中有一个函数,如下所示:
我可以在 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/