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