Tôi có tệp Global.asx cần thực hiện các công cụ xác thực, kiểm tra và định cấu hình tùy chỉnh. Điều này là cần thiết vì nó hỗ trợ hệ thống SSO dựa trên SAML và cần ghi đè xác thực thông thường .Net (không hỗ trợ SAML hoặc xác thực hỗn hợp)Kiểm tra tệp tĩnh trong Application_BeginRequest?
Tôi không muốn kích hoạt tệp tĩnh cho các tệp tĩnh, chẳng hạn như .js
, .css
, .png
, v.v.
Trong Cassini/WebDev và IIS7 thì có.
Điều tôi muốn có là một số kiểm tra đơn giản, chẳng hạn như (không tồn tại, không may) để xác định các tệp tĩnh.
Tôi nhận ra rằng điều này sẽ khá đơn giản để viết, nhưng nó cảm thấy giống như một cái gì đó mà phải đã tồn tại - IIS đã áp dụng bộ đệm chính sách công cụ cho các tập tin tĩnh và như vậy.
Tôi cần một giải pháp mã, thay vì cấu hình IIS thay đổi một.
Cập nhật
Đây là cách giải quyết hiện tại của tôi:
/// <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);
}
này hoạt động và đủ nhanh, nhưng cảm thấy khủng khiếp clunky. Đặc biệt dựa vào các phần mở rộng sẽ dễ bị lỗi nếu chúng ta thêm các tệp tĩnh mới không được nghĩ tới.
Có cách nào tốt hơn mà không thay đổi cấu hình IIS không?
Tôi nhận ra rằng tôi có thể viết thực hiện của riêng mình (như tôi nói trong câu hỏi) nhưng cảm giác như tái phát minh ra bánh xe. IIS và .Net đã biết rằng đây là yêu cầu tệp tĩnh nên có một cách để thực hiện điều này. – Keith