تكوين IIS7 إلى محتوى ثابت من الخادم من خلال وقت تشغيل ASP.NET
-
25-09-2019 - |
سؤال
لقد بحثت عالياً منخفضًا وما زلت لا أجد إجابة محددة.
كيف يمكنني تكوين 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
لا يمكن استخدامه في موقع ويب مسبقًا. أنا غاضبة.