تكوين IIS7 إلى محتوى ثابت من الخادم من خلال وقت تشغيل ASP.NET

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

سؤال

لقد بحثت عالياً منخفضًا وما زلت لا أجد إجابة محددة.

كيف يمكنني تكوين IIS 7.0 أو تطبيق ويب في IIS بحيث يتعامل وقت تشغيل ASP.NET الكل الطلبات - بما في ذلك تلك إلى الملفات الثابتة مثل *.js, *.gif, ، إلخ؟

ما أحاول فعله هو على النحو التالي.

لدينا نوع من موقع Saasy ، والذي يمكننا "العلامة التجارية" لكل عميل. "العلامة التجارية" تعني تطوير صفحة رئيسية مخصصة واستخدام مجموعة من *.css وغيرها من الصور.

بشكل طبيعي تمامًا ، أنا أستخدم VirtualPathProvider, الذي يعمل مثل هذا:

public override System.Web.Hosting.VirtualFile GetFile(string virtualPath)
{
    if(PhysicalFileExists(virtualPath))
    {
        var virtualFile = base.GetFile(virtualPath);
        return virtualFile;
    }

    if(VirtualFileExists(virtualPath))
    {
        var brandedVirtualPath = GetBrandedVirtualPath(virtualPath);
        var absolutePath = HttpContext.Current.Server.MapPath(brandedVirtualPath);

        Trace.WriteLine(string.Format("Serving '{0}' from '{1}'", 
            brandedVirtualPath, absolutePath), "BrandingAwareVirtualPathProvider");

        var virtualFile = new VirtualFile(brandedVirtualPath, absolutePath);
        return virtualFile;    
    }

    return null;
}

الفكرة الأساسية هي كما يلي: لدينا أ branding المجلد داخل الويب الخاص بنا ، والذي بدوره يحتوي على مجلدات لكل "علامة تجارية" ، مع "العلامة التجارية" تساوي اسم المضيف. وهذا هو ، طلبات إلى http://foo.example.com/ يجب استخدام ملفات ثابتة من branding/foo_example_com, ، بينما http://bar.example.com/ يجب استخدام المحتوى من branding/bar_example_com.

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

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

المحلول

II7 بالفعل يفعل ذلك إذا تجمع التطبيقات Managed Pipeline Mode تم تعيينه على Integrated وهو الافتراضي. في الوضع المتكامل ، يتعامل ASP.NET مع جميع الطلبات بما في ذلك تلك الخاصة بكائنات ثابتة.

إذا كان عليك مغادرة تجمع التطبيق الخاص بك في Classic Mode ثم تحتاج إلى استخدام نفس التقنيات التي ستستخدمها في IIS 6 لإنشاء معالجات بشكل صريح لمختلف الامتدادات الثابتة.

معلومات إضافية بناء على التعليقات: أعتقد أن القطعة المفقودة هي إنشاء ملف HttpHandler للتعامل مع الامتدادات الأخرى (.js ، .css ، إلخ). بدون هذا ، ستستخدم ASP.NET المعالجة الافتراضية لهذه الأنواع من الملفات. ستنشئ مرجعًا لك معالجك في web.config. هذه المقالة هو مثال على إنشاء httphandler للملفات الثابتة.

نصائح أخرى

مجد للجميع ، لكن المشكلة كانت في مساحة مختلفة تمامًا.

VirtualPathProvider لا يمكن استخدامه في موقع ويب مسبقًا. أنا غاضبة.

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