كيف يتم التعامل مع أخطاء جانب الخادم في منشور / إعادة توجيه / الحصول على نمط؟

StackOverflow https://stackoverflow.com/questions/599086

  •  11-09-2019
  •  | 
  •  

سؤال

بالنسبة لحالة الاستخدام الناجحة، فإن تدفق العمل Post / Redirect / Get (PRG) بسيط للغاية: ببساطة إعادة توجيه (جانب العميل) إلى الصفحة المطلوبة. ولكن ماذا عن الحالات التي تصادفها الأخطاء أثناء التحقق من جانب الخادم ونريد الحفاظ على المدخلات عندما نعرض صفحة الإدخال مرة أخرى؟

بقدر ما أستطيع أن أقول، هناك طريقتان: ببساطة إعادة تقديم صفحة الإدخال بعد تقديم نشر النموذج (أي عدم إعادة توجيه) أثناء أخطاء (وبالتالي تجاهل نمط PRG)؛ أو، إعادة توجيه إلى صفحة الإدخال، وتخزين المدخلات السابقة في مكان ما يمكن استرجاعها لاحقا (مثل الجلسة)، أثناء التقديم. كلاهما لديه عيوب: في الأول، يتم عرضنا مع مشاكل نمط PRG يساعدنا على تجنب (مثل المرجعية، التقديم المزدوج)؛ النهج الثاني يؤدي إلى عدم التناقض يحصل (ستجد أولا المدخلات المخزنة، قد لا تتلجع لاحقة). هل هناك بدائل أخرى لتلك المذكورة هنا؟ آمل أن أتمكن من المدخلات من المجتمع حول كيفية التعامل مع هذه الحالة.

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

المحلول

عادة ما أفعل ذلك بالطريقة الأولى التي تصفها - إعادة توجيه فقط في حالة وجود تقديم ناجح. من الصعب رؤية حالة الاستخدام الحقيقي لوضع إشارة مرجعية نموذج يحتوي على بيانات غير صالحة؛ من ناحية أخرى، غالبا ما يكون من المنطقي إشارة مرجعية إلى صفحة تأكيد (بعد تقديم نجاح).

نصائح أخرى

إذا كان عنوان URL الذي يتم استخدامه لملء النموذج هو مرحلة ما هي النموذج، فلا أعتقد أن هناك مشكلة. إذا كانت الإدخال صالحة، إعادة التوجيه والحصول عليها. إذا كان غير صالح، redisplay النموذج المملوء. بهذه الطريقة، يبدو التفاعل:

GET  /your-url => blank form
POST /your-url (success) => Redirect => GET /success-url
POST /your-url (failure) => filled-in form

تؤثر قضية الإشارة المذكورة على كلا النهجين، لا يمكنك تحديد شيء ما يعتمد على بعض البيانات المؤقتة المحفوظة على الخادم.

والتقديم المزدوج ليس مشكلة حقا إذا كنت تأكد من أنه إذا فشل التحقق من الصحة، فلن تقوم بحفظ أي بيانات (أي كل طلب مع البيانات الفاشلة هو طلب IDEMPotent).

لذلك فإن PRG فقط النجاح هو نهج نظيف للغاية.

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

لسهولة الاستخدام، يجب عليك التأكد من ذلك التحقق من جانب العميل ممتاز, هذه فكرة جيدة بأي حال من الأحوال، كمستخدمين مثل ردود فعل فورية. استخدام جافا سكريبت، أو ميزات نموذج HTML5 الجديدة, ، مثل ال required سمة أو maxlength السمة أو type="email" السمة وهلم جرا.

بالطبع بكل تأكيد، يجب أن لا يزال لديك التحقق من جانب الخادم للأمن، وللهور رشيقة.

إذا كنت تستخدم ASP.NET MVC، فهناك طريقة أخرى يمكن استخدامها في وضع الفشل. يتم تغطيته في # 13 من هذه المقالة: ASP.NET MVC أفضل الممارسات (الجزء 1).

إذا قمت بتطبيق هذه الطريقة ثم يمكنك دائما إعادة توجيه بعد وظيفة، حتى لو أدى المرحلة إلى فشل.

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