Я новичок в Функциях Azure. Я привык кодировать с помощью WebApi, где у меня есть ActionExecutingContext, который помогает проверять ModelState. Я создал Атрибут ActionFilter, который делает это автоматически:
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class ValidateModelStateAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
//Do something
}
}
}
Как я могу сделать это или что-то подобное с помощью функции Azure?
Например, с этим DTO со свойством имени, установленным как обязательное:
public class TestDto
{
[Required]
public string Name { get; set; }
}
Я создал простое расширение, которое проверяет объект и устанавливает выходной параметр с набором ошибок.
public static class ObjectExtensions
{
public static bool IsValid(this object o, out ICollection<ValidationResult> validationResults)
{
validationResults = new List<ValidationResult>();
return Validator.TryValidateObject(o, new ValidationContext(o, null, null), validationResults, true);
}
}
Итак, в моей функции Azure вот что у меня есть:
[FunctionName("Create")]
public async Task<IActionResult> CreateAsync(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "test/")] TestDto dto,
CancellationToken cts,
ILogger log)
{
if (!dto.IsValid(validationResults: out var validationResults))
{
return new BadRequestObjectResult($"{nameof(TestDto)} is invalid: {string.Join(", ", validationResults.Select(s => s.ErrorMessage))}");
}
var result = await _testManager.CreateAsync(new Test() { Name = dto.Name }, cts);
return new OkObjectResult(result);
}
Здравствуйте, я не уверен, что понимаю ваш вопрос. С помощью webapi вы можете проверить контекст, встроенный в него. Но ничего подобного с лазурной функцией нет. Дайте мне знать, если он ответит на ваши вопросы. Если нет, не могли бы вы дать более подробную информацию?
Я думаю, вы также можете написать для этого собственный атрибут, который реализует OnExecutingAsync и выполняет там проверку, см. https://www.c-sharpcorner.com/article/do-you-know-azure-function-have-function-filters/
Спасибо за ваш комментарий. Я прочитал статью быстро, да, это тоже может помочь. И это чище моего решения :).
как это относится к лазурным функциям?