我想用 Fluent Validation 制定一個規則來檢查:如果這個欄位包含信用卡號,那么它是無效的(因為它包含敏感資料)
似乎很容易。
Fluent Validation 提供CreditCard() 檢查,但這與我想要做的相反,我搜索是否有某種否定,比如.Not().CreditCard()or .NotMatch(),但我找不到。
有一個想法是制作一個僅當欄位包含有效信用卡時才匹配的正則運算式,但它似乎非常不直觀且不可讀,如果有更直接的解決方案,我會徘徊。
uj5u.com熱心網友回復:
CreditCardValidator 的目的是為了避免保存/處理無效的 CreditCard。但是根據您的要求,您似乎可以保存/處理無效的信用卡,但會阻止用戶提供有效資料。
我無法在這里獲得真正的用例。請澄清你的用例。
更新:
你可以做這樣的事情。
public class MyCreditCardValidator<T> : CreditCardValidator<T>
{
public override bool IsValid(ValidationContext<T> context, string value)
{
bool validCreditCard = base.IsValid(context, value);
// for my case i want invalid credit card
return !validCreditCard;
}
protected override string GetDefaultMessageTemplate(string errorCode)
{
return "field contains credit card";
}
}
并添加擴展方法,如
public static class CustomerValidatorExtensions
{
public static IRuleBuilderOptions<T, string> NotACreditCard<T>(this IRuleBuilder<T, string> ruleBuilder)
{
return ruleBuilder.SetValidator(new MyCreditCardValidator<T>());
}
}
像這樣打電話
public CustomerValidator()
{
RuleFor(a => a.Notes).NotACreditCard();
}
現在,當您在備注欄位中提供有效的信用卡時,它將無法通過驗證并回傳您的錯誤


希望這有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/495455.html
