У меня есть файл 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?