التعامل مع HttpRequestValidationException بأمان ومتوافق مع ASP.net AJAX؟

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

سؤال

تعد ValidateEvents إحدى وظائف ASP.net الرائعة، لكن شاشة الموت الصفراء ليست لطيفة جدًا.لقد وجدت طريقة لكيفية التعامل مع HttpRequestValidationException بأمان هنا, ولكن هذا لا يعمل مع ASP.net AJAX بشكل صحيح.

في الأساس، حصلت على UpdatePanel مع TextBox وزر، وعندما يكتب المستخدم لغة HTML في Textbox، تظهر نافذة JavaScript منبثقة تحتوي على رسالة خطأ تفيد بعدم تعديل الاستجابة.

لذا أتساءل ما هي أفضل طريقة للتعامل مع HttpRequestValidationException بأمان؟بالنسبة للطلبات "العادية"، أود فقط عرض رسالة خطأ، ولكن عندما يكون طلب AJAX، أرغب في إلغاء الطلب وإرجاع شيء ما للإشارة إلى وجود خطأ، حتى تتمكن صفحتي الأمامية من التفاعل معه؟

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

المحلول

وجدته و تدوين حول هذا الموضوع.في الأساس، EndRequestHandler وargs.set_errorHandled هما أصدقاؤنا هنا.

<script type="text/javascript" language="javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(EndRequestHandler);

function EndRequestHandler(sender, args) {
    if (args.get_error() != undefined)
    {
        var errorMessage;
        if (args.get_response().get_statusCode() == '200')
        {
            errorMessage = args.get_error().message;
        }
        else
        {
            // Error occurred somewhere other than the server page.
            errorMessage = 'An unspecified error occurred. ';
        }
        args.set_errorHandled(true);
        $get('<%= this.newsletterLabel.ClientID %>').innerHTML = errorMessage;
    }
}
</script>

نصائح أخرى

حسنًا، يبدو أنك ستحتاج إلى العثور على نوع ما من جافا سكريبت للتحقق من إدخال HTML أو أداة التحقق من جانب العميل.

وهذا ما أود تجنبه إن أمكن، ولكن يبدو أن هذا أكثر تعقيدًا مما كان متوقعًا.

عادةً، ينصح الجميع باستخدام AsyncPostBackError الخاص بـ ScriptManager، لكن هذا لا يعمل إذا تم استدعاؤه على Global.asax.لسوء الحظ، نظرًا لأن HttpRequestValidationException ينبعث من وقت التشغيل، فإنه لا يدخل الكود الخاص بي أبدًا ولا يمكنني فعل الكثير داخل Application_Error.

لذا نعم، يجب أن يتم ذلك بالفعل في JavaScript، وآمل فقط أن تكون هناك طريقة لإضافة "خطاف" مثل وظيفة BeginRequestHandler حتى لا أضطر إلى "اختراق" كود Microsoft.إذا وجدت الحل قبل أي شخص آخر، سأضعه هنا :-)

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