public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = "otp/send")] HttpRequest req) { _logger.LogInformation($"{nameof(OtpSendApi)} processed a request."); try { var request = await req.ParseAndThrow <OtpSendRequest>(); // validation var validationResult = await _validation.ValidateAsync(req, request.User); if (!validationResult.IsValid) { return(validationResult.ErrorActionResult); } await _otpService.SendAsync(request); return(new OkResult()); } catch (ArgumentException argumentException) { return(new BadRequestObjectResult(argumentException.Message)); } catch (UnauthorizedAccessException unauthorizedAccessException) { return(new NotFoundObjectResult(unauthorizedAccessException.Message)); } catch (Exception e) { _logger.LogError(e, "OTPSendError"); return(new InternalServerErrorResult()); } }