Можно ли запускать код до запуска каждой функции в функциях Azure? - PullRequest
0 голосов
/ 12 ноября 2018

В настоящее время я выполняю кучу кода (например, проверяю параметры запроса / заголовка, а также аутентифицирую пользователя) в каждой функции вручную:

[FunctionName( "functionname" )]
public static async Task<HttpResponseMessage> Run( [HttpTrigger( AuthorizationLevel.Anonymous, "post")]HttpRequestMessage req)
{

   // Step 1 - Validate input

   // Step 2 - Process request

}

Но я бы хотел изменить рефакторинг шага 1, чтобы он не отображался внутри каждой функции. Можно ли написать атрибут или какую-то логику предварительного запроса, которая принимает HttpRequestMessage и возвращает HttpResponseMessage (например, BadRequest) на основе результата проверки?

1 Ответ

0 голосов
/ 13 ноября 2018

Один из вариантов - использовать (в настоящее время) функцию предварительного просмотра функций Azure с именем 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

...