2012-01-19 9 views
10

मैं PostAcquireRequestState को झुका एक प्रत्यायोजित विधि के साथ एक IHttpModule कार्यान्वयन है, प्रत्येक HTTP अनुरोध के लिए, मैं यदि वर्तमान अनुरोध किए गए संसाधन पृष्ठ (aspx) *.css, *.ico जैसे अन्य सभी संसाधनों भेदभाव है, इसकी जांच करने जानना चाहते हैं, *.png और इसी तरह से।वर्तमान अनुरोध संसाधन कैसे जांचें सी # एएसपी.नेट में एक पृष्ठ है?

असल में मैं निम्नलिखित कर सकते हैं:

private static void OnPostAcquireRequestState(object sender, EventArgs e) 
{ 
    bool isPage = HttpContext.Current.Request.Path.EndsWith(".aspx"); 
} 

लेकिन मुझे पता है कि अगर वहाँ कुछ कठिन ".aspx" के साथ की जाँच की तुलना में ऐसा करने के लिए अलग है चाहते हैं।

+0

'ashx, asmx, asx' और अन्य सर्वर-पक्ष निष्पादन योग्य प्रारूपों के बारे में क्या? – Abel

+0

@ एबेल, यही कारण है कि मैं जानना चाहता हूं कि प्रारूप *'aspx "' * के खिलाफ हार्ड चेकिंग करने के लिए कुछ अलग है या नहीं। उस बिंदु को हाइलाइट करने के लिए धन्यवाद, क्योंकि मैंने इसे अपने प्रश्न पर नहीं रखा है। :) –

+0

आप क्या हासिल करने की कोशिश कर रहे हैं? –

उत्तर

3

एक चीज जो आप कर सकते हैं वह पंजीकृत HTTP Handlers की एक सूची प्राप्त करने के लिए है और जांचें कि क्या उन्हें सिस्टम क्लास द्वारा संभाला जाता है या नहीं। वैकल्पिक रूप से

using System.Configuration; 
using System.Web.Configuration; 

Configuration config = WebConfigurationManager.OpenWebConfiguration("/"); 
HttpHandlersSection handlers = (HttpHandlersSection) config 
           .GetSection("system.web/httpHandlers"); 

List<string> forbiddenList = new List<string>(); 

// next part untested: 
foreach(HttpHandlerAction handler in handlers.Handlers) 
{ 
    if(handler.Type.StartsWith("System.")) 
    { 
     forbiddenList.Add(handler.Path); 
    } 
} 

, आप अपने खुद के (या वर्तमान) डोमेन को छोड़कर अन्य सभी मौजूदा संचालकों देखने और सूची वापस कर सकते हैं: मान लें कि आप एक नाम स्थान System.* में अपने स्वयं के वर्गों का नाम नहीं, यह काफी सरल है , संभवतः कुछ अपवाद प्रदान किए गए (यानी, यदि आप किसी मौजूदा छवि हैंडलर को ओवरराइड करना चाहते हैं)। लेकिन जो भी आप चुनते हैं, इससे आपको पहले से पंजीकृत होने की पूरी पहुंच मिलती है।


नोट: रिवर्स करना आम तौर पर आसान होता है। अब आप कुछ पथों को ब्लैकलिस्ट करना चाहते हैं, लेकिन इसके बजाय, यदि आप श्वेतसूची कर सकते हैं (यानी, उन एक्सटेंशन की एक सूची बनाएं जिन्हें आप संभालना चाहते हैं) तो आप इसे स्वयं को बहुत आसान बना सकते हैं।