توقف عن الاستثناء من إلقاؤه لوحدة تحكم غير موجودة

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

سؤال

حسنًا ، لذلك أنا مضغوط في هذه المسألة. لقد رأيت الكثير من الأشياء التي من المفترض أن تحل هذه المشكلة ، لكنني لا أحصل على حل يمكن أن يلبي متطلباتي.

أنا أستخدم Elmah لتسجيل الاستثناءات وأحصل على هذا الاستثناء عند إما عنوان URL مع وحدة تحكم غير صالحة أو وحدة تحكم مناسبة وإجراء غير صالح.

System.Web.HttpException: The controller for path '/BadController' was not found or does not implement IController.
   at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
   at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
   at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

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

لدي [HandleError] سمة تزيين جميع وحدات التحكم. هل هذا ممكن؟ وإذا كان الأمر كذلك ، فسأقدر أي مساعدة.

لقد حاولت ، وضع أ الطريق النهائي الذي يعيد التوجيه, ، لكنه يتطابق مع طريق قبل ذلك لأي سبب من الأسباب. لقد حاولت استخدام أ httpmodule, ، والمقاصة في Application_Error حدث Global.asax ملف. لا شيء يوقف هذا الاستثناءات.

شكرا مرة أخرى على اي مساعدة!

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

المحلول 3

ربما لم يكن يروي مشكلتي بشكل صحيح ، بعد أن من المفترض أن يتم طرح الكثير من الحفر حول هذا الاستثناء. الجواب هو استبعاد تلك الاستثناءات من Elmah ، وفقا لهذا مقالة - سلعة.

بشكل افتراضي ، تقوم Elmah بتسجيل تفاصيل كل استثناء غير معبأ ، بما في ذلك 404 أخطاء HTTP الأخرى. يمكنك إرشاد Elmah بتجاهل هذه الأخطاء أو غيرها من الأخطاء باستخدام تصفية الخطأ.

نصائح أخرى

قم بإنشاء مسيرة ، والتي تتحقق مما إذا كانت وحدة التحكم موجودة (في الواقع ، تقوم بمسح جميع وحدات التحكم الممكنة في البداية وتخزينها ، فأنت تعرف ما أعنيه) وإضافته إلى مسارك القياسي.

لذلك ، عندما يكون لديك طلب إلى وحدة تحكم سيئة ، لا يتم قبوله بواسطة المسار العادي. ولكن بعد ذلك تم قبوله بواسطة Catchall -> 404 Route ...

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

يمكنك لف مصنع وحدة التحكم الخاصة بك ، أو استخدام إحدى المكتبات العديدة كنقطة انطلاق. سيكون لديك فئة تنفذ ICONTROLLERFACTORY وداخل وظيفة CreateController () هي منطقك المخصص.

أنا أستعمل DSO's Itcloud Contrib. لا شيء من هذا {controller}/{action} المعلمات العامة. صريح UrlRoute سمات لكل طريقة عمل. أحب رؤية قيود المعلمة مباشرة فوق الطريقة.

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