Проверить наличие статического файла во время Application_BeginRequest?

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

6
задан Keith 13 July 2011 в 14:10
поделиться