2012-01-19 25 views
10

Tôi có một thực hiện IHttpModule với một phương pháp giao nối với PostAcquireRequestState, đối với mỗi yêu cầu HTTP, tôi muốn biết làm thế nào để kiểm tra xem các tài nguyên được yêu cầu hiện nay là trang một (aspx) phân biệt đối xử tất cả các nguồn lực khác như *.css, *.ico, *.png v.v.Làm thế nào để kiểm tra tài nguyên yêu cầu hiện tại là một trang trong C# ASP.NET?

Thực ra tôi có thể làm như sau:

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

Nhưng tôi muốn biết nếu có cái gì đó khác nhau để làm hơn là kiểm tra khó khăn với ".aspx".

+0

Còn về định dạng tệp thực thi 'ashx, asmx, asx' và các phía máy chủ khác? – Abel

+0

@ Abel, đó là lý do tôi sẽ biết nếu có * một cái gì đó khác nhau để làm một kiểm tra cứng chống lại định dạng '" .aspx "' *. Cảm ơn vì đã nêu bật điểm đó, vì tôi không đặt câu hỏi đó vào câu hỏi của mình. :) –

+0

Bạn đang cố gắng đạt được điều gì? –

Trả lời

3

Một điều bạn có thể làm là lấy danh sách đăng ký HTTP Handlers và kiểm tra xem chúng có được xử lý bởi một lớp hệ thống hay không. Giả sử bạn không đặt tên cho lớp học của riêng bạn trong một không gian tên System.*, điều này là khá hoàn hảo:

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); 
    } 
} 

Ngoài ra, bạn có thể phục hồi các tra cứu và danh sách tất cả xử lý hiện có trừ trong phạm vi riêng (hoặc hiện hành) của bạn , có thể cung cấp một số ngoại lệ (ví dụ: nếu bạn muốn ghi đè trình xử lý hình ảnh hiện có). Nhưng bất cứ điều gì bạn chọn, điều này cho phép bạn truy cập đầy đủ vào những gì đã được đăng ký.


Lưu ý: thường dễ dàng hơn để làm ngược lại. Bây giờ bạn có vẻ muốn danh sách đen một vài đường dẫn, nhưng thay vào đó, nếu bạn có thể lập danh sách trắng (ví dụ: tạo danh sách các tiện ích mở rộng mà bạn làm muốn xử lý), bạn có thể tự làm cho mình dễ dàng hơn nhiều.

Các vấn đề liên quan