代码之家  ›  专栏  ›  技术社区  ›  user246392

是否可以在每个函数开始在Azure函数中运行之前运行代码?

  •  0
  • user246392  · 技术社区  · 8 年前

    目前,我在每个函数中手动执行一系列代码(例如验证查询/头参数以及验证用户):

    [FunctionName( "functionname" )]
    public static async Task<HttpResponseMessage> Run( [HttpTrigger( AuthorizationLevel.Anonymous, "post")]HttpRequestMessage req)
    {
    
       // Step 1 - Validate input
    
       // Step 2 - Process request
    
    }
    

    HttpRequestMessage HttpResponseMessage BadRequest )基于验证结果?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Sebastian Achatz    8 年前

    FunctionFilters

    从官方文件复制(并缩短)的样本:

    public static class Functions
    {
        [WorkItemValidator]
        public static void ProcessWorkItem(
            [QueueTrigger("test")] WorkItem workItem)
        {
            Console.WriteLine($"Processed work item {workItem.ID}");
        }
    }
    
    public class WorkItemValidatorAttribute : FunctionInvocationFilterAttribute
    {
        public override Task OnExecutingAsync(
            FunctionExecutingContext executingContext, CancellationToken cancellationToken)
        {
            executingContext.Logger.LogInformation("WorkItemValidator executing...");
    
            var workItem = executingContext.Arguments.First().Value as WorkItem;
            string errorMessage = null;
            if (!TryValidateWorkItem(workItem, out errorMessage))
            {
                executingContext.Logger.LogError(errorMessage);
                throw new ValidationException(errorMessage);
            }
    
            return base.OnExecutingAsync(executingContext, cancellationToken);
        }
    
        private static bool TryValidateWorkItem(WorkItem workItem, out string errorMessage)
        {
            // your validation logic goes here...
        }
    }
    

    您可以在此处找到更多信息: https://github.com/Azure/azure-webjobs-sdk/wiki/Function-Filters