Как проверить собственность на почту - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть приложение asp .net mvc.Для всех других моих атрибутов я использовал аннотации данных для проверки атрибутов.Но я хотел бы получить пользовательскую проверку.Я читал в Интернете, что подход к проверке пользовательских аннотаций может быть подходом.

Перейдите по этой ссылке здесь ASP.NET MVC: пользовательская проверка с помощью DataAnnotation выглядит как отличное решение.Единственная проблема, с которой я сталкиваюсь, - это как получить доступ к моему DBContext, если он не находится внутри контроллера.

То, что у меня есть до сих пор

Это код, который я обычно использовал в контроллерах для получения текущего пользователя и контекста БД.

Код контроллера

private ApplicationDbContext _dbContext => HttpContext.GetOwinContext().Get<ApplicationDbContext>();

private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
    get
    {
        return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
    }
    private set
    {
        _userManager = value;
    }
}

ViewModel

[HasNoRedemption]
public string code {get; set;}

HasNoRedemption.cs

public class HasNoRedemption : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        //check if user has ever claimed the code, return true is good

    }
}

Если я могу получить некоторую помощь в создании пользовательской проверки, такую, что я смогу проверить БД или предложение длялучший подход.

1 Ответ

1 голос
/ 28 сентября 2019

1) Я бы не рекомендовал использовать атрибуты аннотации данных для реализации вашей бизнес-логики внутри.Атрибуты проверки должны содержать чистые функции.Цель атрибутов проверки состоит в том, чтобы сузить диапазон входных данных, которые считаются правильными.Не реализовывать бизнес-правила вашего приложения

2) Если вы действительно хотите делать то, что вы хотите (ради любопытства), проверьте следующие инструкции: https://andrewlock.net/injecting-services-into-validationattributes-in-asp-net-core/

public class CustomValidationAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(
         object value, ValidationContext validationContext)
    {
        // validationContext.GetService() ... 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...