سؤال

أحاول معرفة أفضل طريقة للتحقق من صحة البيانات في تطبيق MVC C# ويبدو أن XVAL هو الأفضل. ومع ذلك ، فأنا أواجه مشكلة في التحقق من صحة نوع البيانات.

في البداية كنت أقوم بعمل updateModel في DTO ثم تشغيل التحقق من الصحة على DTO. لقد نجح هذا الأمر بشكل رائع لأشياء مثل الحقول المطلوبة ، ولكن updateModel سوف يلقي استثناء إذا حاولت ، على سبيل المثال ، تعيين سلسلة ("ASD") في حقل عشري. نظرًا لأن UpdateModel كان لا بد من تشغيله قبل أن يكون هناك أي بيانات للتحقق من صحة أنني لم أكن متأكدًا من كيفية التغلب على ذلك.

كان الحل الخاص بي هو إنشاء DTO لكل نموذج سوف يقوم updateModel بنسخه ، وتشغيل التحقق من صحة ذلك ، ثم نسخ القيم إلى DTOs المناسبة. ستكون جميع السمات على النموذج DTO سلاسل حتى لا تنفد updateModel أبدًا ، وسأفرض التحقق من صحة البيانات من خلال XVAL. ومع ذلك ، على الرغم من أن القواعد مثل المطلوبة يتم تشغيلها ، إلا أنه لا يبدو لي أن أحصل على قاعدة نوع البيانات للبدء (في هذه الحالة محاولة نوع البيانات).

لقد حاولت أيضًا الحصول على التحقق من صحة من جانب العميل ، لكنني كنت آمل أن تكون هناك طريقة نظيفة للقيام بالتحقق من صحة من جانب الخادم لأنواع البيانات.

ما الذي فعله الآخرون فيما يتعلق بالتحقق من صحة أنواع البيانات على جانب الخادم؟

هل كانت مفيدة؟

المحلول

ما انتهى بي الأمر هو إنشاء بعض DTO التي تمثل النماذج. ستأخذ DTOs طلبًا.

سيكون لديهم جميع خصائص السلسلة وأضع سمات XVAL عليها. سأستخدم بعد ذلك التعبيرات XVAL والتعبيرات العادية للتأكد من أن البيانات القادمة صالحة (على سبيل المثال تاريخ صالح ، البريد الإلكتروني ، الرقم ، إلخ). وبهذه الطريقة لن يكون هناك استثناء أبدًا لأنه كان دائمًا يدخل سلسلة ، بدلاً من .NET محاولة تحليله في تاريخ أو شيء من هذا القبيل.

هذا من شأنه أن يتأكد من أن البيانات التي وصلتها دائمًا إلى XVAL حيث يمكنني تشغيل التحقق الذي أريده ، و ومن بعد قم بتحويله إلى النوع المناسب مثل DateTime بمجرد أن أعرف أن لدي بيانات صالحة.

نصائح أخرى

أنا أستخدم مصادقة مخصصة مشتقة من ValidationAttribute للتحقق من صحة البيانات التي يجب تحليلها على جانب الخادم من سلسلة إلى أنواع البيانات الأخرى. فمثلا:

public class DateAttribute : ValidationAttribute
    {

        public override bool IsValid(object value)
        {
            var date = (string)value;
            DateTime result;
            return DateTime.TryParse(date, out result);
        }
    }

لقد وجدت أيضًا طريقة لتحويل سمات التحقق من الصحة إلى سمات التحقق من جانب العميل وجانب الخادم دون كتابة أي رمز JavaScript مخصص. لا بد لي من الاستخلاص من فئة قاعدة صحة مختلفة. ألق نظرة على بلدي مقالة مدونة حول التحقق من صحة من جانب العميل إذا كنت ترغب في معرفة المزيد عن هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top