我在名为'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但是我得到的只是这个错误:
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 回答
看起来您正在使用预编译的C#函数,这意味着您有一个
csproj
文件,并且您的函数已编译为DLL,然后部署到Azure .在这种情况下,函数SDK会自动生成
function.json
,您不应该对该文件进行任何手动更改 . 触发器将自动置于function.json
,并且所有其他绑定都是从函数签名和属性推断出来的 .因此,您应该在
graphToken
参数上放置Token
属性,如here所述: