سؤال

لدي MVC تحكم تسمى شعبية. http://mysite/Downloads

أنا أيضا أريد أن أضع المادية الملف في مجلد مادية يسمى http://mysite/Downloads/MyFile.zip.

إذا كنت ببساطة إنشاء مجلد أحصل على 403 عند التصفح http://mysite/Downloads.(على الأرجح بسبب التصفح الدليل هو تعطيل) ولكن أريد MVC تحكم ركلة بدلا من ذلك.

كيف أفعل ذلك ؟

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

المحلول

إذا قمت بالاستعراض إلى http://mysite/Downloads/{ACTION} فإنه سيتم اطلاق النار عمل حدات التحكم الخاصة بك.

والشيء الوحيد الذي لن ينجح في المثال الخاص بك هو /Downloads مع أي إجراء. هل يمكن إعادة كتابة هذا URL إلى توجيهك إلى الإجراء الافتراضي.

وبالإضافة إلى ذلك، سوف تحتاج إلى أن يكون في routehandler تجاهل ملفات التحميل. يمكنك إضافة سطر في الملف Global.asax لتجاهل كل الملفات المضغوطة أو بعض الدول الأخرى نمط تجاهل التي تناسب.

routes.Ignore("{resource}.zip");

نصائح أخرى

منذ .NET framework 3.5 يمكنك الطريق الملفات الموجودة:

public static void RegisterRoutes(RouteCollection routes) {
    routes.RouteExistingFiles = true;
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
       name: "Default",
       url: "{controller}/{action}/{id}",
       defaults: new { controller = "Home", 
                          action = "Index", 
                          id = UrlParameter.Optional }
    );
}

لذا لنفترض أن لدينا مجلد على جذر الموقع يسمى Markets تحتوي على audio.mp3 ملف:

\Markets
\Markets\audio.mp3

على افتراض وجود MarketsController, لو قدمنا طلب Markets, سيكون توجيهها إلى Markets/Index.

إذا طلبنا /Markets/audio.mp3 نحن نحصل على ملف mp3 و إذا طلبنا Markets/AnythingElse, وعادي التوجيه سوف تطبق.

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