ASP.NET MVC لا تستخدم وحدة التحكم في مسار الملف الصريح في IIS7

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

سؤال

النظر في staticResourController الذي يحدد ويقدم الملفات.

لقد قمت بإعداد مسار صريح لـ "Favicon.ico" الذي سيتعامل مع طلب هذا الملف باستخدام StaticResourController:

routes.MapRoute(
        "favicon",
        "favicon.ico",
        new { controller = "StaticResource", action = "Get", file = "favicon.ico", area="root"},
        new[] { "Dimebrain.Mvc.Controllers" }
        );

في IIS6 تحدث النتيجة المتوقعة عند تقديم طلب ل http: // localhost: 8080/favicon.ico.

لسوء الحظ عندما أنشر في IIS7 http: //localhost/favicon.ico يعيد 404 تم إنشاؤه بواسطة IIS ، على الأرجح لأنه يبحث بالفعل عن favicon.ico في مجلد جذر الويب ، حيث لا يوجد.

لقد حدث ما يكفي في StaticResourController بأن هذا ليس شيئًا جيدًا لتطبيقي ، خاصة وأنه متعدد المستأجرين ويمكن أن يتغير ملف favicon.ico. لقد قمت بتعيين وحدات خادم الويب الخاصة بي للتعامل مع كل طلب وتجاوز Routecollection لتجاهل عمليات التحقق من الملفات باستخدام RouteExiStingFiles.

لماذا يعود UrlroutingModule في طريقي في IIS7 وإجبار تقديم الملف الثابت من القرص (404)؟

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

المحلول

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

// Make sure MVC is handling every request for static files
routes.RouteExistingFiles = true;

// Don't process routes where actual static resources live
routes.IgnoreRoute("content/{*pathInfo}");
routes.IgnoreRoute("scripts/{*pathInfo}");
routes.IgnoreRoute("areas/admin/content/{*pathInfo}");
routes.IgnoreRoute("areas/admin/scripts/{*pathInfo}");

نصائح أخرى

في إجابة دانيال كرين ، تحتاج إلى إضافة ملف web.confug في System.Webserver قسم:

<modules runAllManagedModulesForAllRequests="true"/>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top