У меня есть файл Global.asx, который должен выполнять пользовательскую аутентификацию, аудит и профилирование. Это необходимо, потому что оно поддерживает систему SSO на основе SAML и требует переопределения обычной .Net-аутентификации (которая не поддерживает SAML или смешанную аутентификацию)Проверьте статический файл во время Application_BeginRequest?
Я не хочу запускать ее для статических файлов, таких как .js
, .css
, .png
, и т.д.
В Cassini/WebDev и IIS7 он делает.
Что я хочу иметь, это простая проверка, например (которой, к сожалению, не существует), чтобы идентифицировать статические файлы.
Я понимаю, что это было бы довольно просто написать, но оно похоже на то, что должно уже существовать - IIS уже применил кэширование материала политики для статических файлов и так далее.
Мне нужно решение для кода, а не изменение конфигурации IIS.
Update
Это мой текущий обходной путь:
/// <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);
}
Это работает и достаточно быстро, но чувствует себя ужасно неуклюжим. В частности, полагаясь на расширения, вы будете склонны к ошибкам, если мы добавим новые статические файлы, о которых не думал.
Есть ли лучший способ без изменения конфигурации IIS?
Я понимаю, что я мог написать свою собственную реализацию (например, я говорю в вопросе), но это похоже на повторное изобретательство колеса. IIS и .Net уже знают, что это статический запрос файла, поэтому должен существовать существующий способ сделать это. – Keith