मेरे पास एक Global.asx फ़ाइल है जिसे कस्टम प्रमाणीकरण, ऑडिटिंग और प्रोफाइलिंग करने की आवश्यकता है। यह इसलिए आवश्यक है, क्योंकि यह एक SAML आधारित SSO सिस्टम का समर्थन करता है और सामान्य नेट प्रमाणीकरण (जो या तो SAML या मिश्रित प्रमाणीकरण का समर्थन नहीं करता)Application_BeginRequest के दौरान एक स्थिर फ़ाइल की जांच करें?
मैं इस तरह के रूप स्टैटिक फ़ाइलें, के लिए यह आग नहीं करना चाहती ओवरराइड करने के लिए की जरूरत है .js
, .css
, .png
, आदि
कैसिनी/webdev में और IIS7 यह करता है।
जो कुछ मैं चाहता हूं वह कुछ सरल जांच है, जैसे (दुर्भाग्य से मौजूद नहीं है) स्थिर फ़ाइलों की पहचान करने के लिए।
मुझे एहसास है कि यह लिखना काफी आसान होगा, लेकिन ऐसा कुछ ऐसा लगता है जो पहले से मौजूद होना चाहिए - आईआईएस पहले ही स्थिर फाइलों के लिए कैशिंग नीति सामग्री लागू कर चुका है।
मुझे आईआईएस कॉन्फ़िगरेशन बदलने के बजाय कोड कोड की आवश्यकता है।
अद्यतन
यह मेरे वर्तमान समाधान नहीं है:
/// <summary>Hold all the extensions we treat as static</summary>
static HashSet<string> allowedExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
".js", ".css", ".png", ...
};
/// <summary>Is this a request for a static file?</summary>
/// <param name="request">The HTTP request instance to extend.</param>
/// <returns>True if the request is for a static file on disk, false otherwise.</returns>
public static bool IsStaticFile(this HttpRequest request)
{
string fileOnDisk = request.PhysicalPath;
if (string.IsNullOrEmpty(fileOnDisk))
{
return false;
}
string extension = Path.GetExtension(fileOnDisk);
return allowedExtensions.Contains(extension);
}
यह काम करता है और काफी तेज है, लेकिन बुरी तरह भद्दा लगता है। विशेष रूप से विस्तार पर निर्भर होने पर त्रुटि प्रवण होने जा रही है यदि हम नई स्थिर फाइलें नहीं सोचते हैं।
आईआईएस कॉन्फ़िगरेशन को बदले बिना कोई बेहतर तरीका है?
मुझे एहसास है कि मैं अपना खुद का कार्यान्वयन लिख सकता हूं (जैसे कि मैं सवाल में कहता हूं) लेकिन ऐसा लगता है कि पहिया का पुन: आविष्कार करना पसंद है। आईआईएस और नेट पहले से ही जानते हैं कि यह स्थैतिक फ़ाइल अनुरोध है, इसलिए ऐसा करने का एक मौजूदा तरीका होना चाहिए। – Keith