Rumah >pembangunan bahagian belakang >C++ >Bagaimana Melaksanakan Pengesahan Bersyarat di Asp.NET Core Menggunakan IvalidatableObject?

Bagaimana Melaksanakan Pengesahan Bersyarat di Asp.NET Core Menggunakan IvalidatableObject?

DDD
DDDasal
2025-01-28 11:46:10689semak imbas

How to Implement Conditional Validation in ASP.NET Core using IValidatableObject?

Dalam teras ASP.NET, gunakan ivalidatableObject untuk melaksanakan pengesahan bersyarat

Interface IvalidatableObject adalah alat praktikal untuk mengesahkan objek teras ASP.NET. Ia membolehkan anda menentukan peraturan pengesahan tersuai yang boleh membandingkan atribut atau proses senario pengesahan keadaan.

Kes antara muka yang biasa adalah untuk mengesahkan sifat -sifat tertentu hanya dalam keadaan tertentu. Sebagai contoh, serpihan kod berikut menunjukkan objek yang boleh disahkan hanya apabila logo tetapan membolehkan ditetapkan:

Kaedah ini bukan yang paling sesuai dalam semua kes, kerana ia perlu menyemak logo Enable dalam kaedah nilai dan mengembalikan hasil yang berkesan secara manual.
<code class="language-csharp">public class ValidateMe : IValidatableObject
{
    [Required]
    public bool Enable { get; set; }
    [Range(1, 5)]
    public int Prop1 { get; set; }
    [Range(1, 5)]
    public int Prop2 { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (!this.Enable)
        {
            // 返回有效结果
            yield break;
        }
        else
        {
            // 检查Prop1和Prop2是否满足其范围要求,并相应地返回结果
            if (this.Prop1 < 1 || this.Prop1 > 5)
            {
                yield return new ValidationResult("Prop1必须在1到5之间", new[] { "Prop1" });
            }
            if (this.Prop2 < 1 || this.Prop2 > 5)
            {
                yield return new ValidationResult("Prop2必须在1到5之间", new[] { "Prop2" });
            }
        }
    }
}</code>

Kaedah lain ialah menggunakan kaedah validateProperty () dalam kaedah nilai. Kaedah ini membolehkan anda menentukan pengesahan untuk atribut tertentu:

Dalam kes ini, hanya apabila pengesahan gagal, kaedah validator.tryValidateProperty () akan menambah hasil pengesahan ke set hasil. Dengan menggunakan kaedah ini, anda boleh mengesahkan atribut secara kondusif mengikut objek objek untuk menjadikan logik pengesahan anda lebih fleksibel dan lebih mudah untuk dikekalkan. Perhatikan bahawa ditambah di sini untuk lebih jelas menunjukkan atribut yang salah.
<code class="language-csharp">public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
    var results = new List<ValidationResult>();
    if (this.Enable)
    {
        Validator.TryValidateProperty(this.Prop1,
            new ValidationContext(this, null, null) { MemberName = "Prop1" },
            results);
        Validator.TryValidateProperty(this.Prop2,
            new ValidationContext(this, null, null) { MemberName = "Prop2" },
            results);

        // 其他随机测试
        if (this.Prop1 > this.Prop2)
        {
            results.Add(new ValidationResult("Prop1必须大于Prop2", new[] { "Prop1", "Prop2" }));
        }
    }
    return results;
}</code>

Atas ialah kandungan terperinci Bagaimana Melaksanakan Pengesahan Bersyarat di Asp.NET Core Menggunakan IvalidatableObject?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn