Tengo un archivo Global.asx que necesita hacer autenticación personalizada, auditar y crear perfiles. Esto es necesario porque admite un sistema SSO basado en SAML y necesita anular la autenticación .Net normal (que no es compatible con SAML o autenticación mixta)¿Buscar un archivo estático durante Application_BeginRequest?
No deseo activarlo para archivos estáticos, como .js
, .css
, .png
, etc.
En Cassini/WebDev e IIS7 lo hace.
Lo que quiero es una simple comprobación, como (que no existe, por desgracia) para identificar los archivos estáticos.
Me doy cuenta de que esto sería bastante simple de escribir, pero se siente como algo que ya debe existir - IIS ya ha aplicado las políticas de almacenamiento en caché para los archivos estáticos, y así sucesivamente.
Necesito una solución de código, en lugar de un cambio de configuración de IIS.
actualización
Ésta es mi solución actual:
/// <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);
}
Esto funciona y es lo suficientemente rápido, pero se siente terriblemente torpe. En particular, confiar en extensiones va a ser propenso a errores si agregamos nuevos archivos estáticos en los que no se pensó.
¿Hay una manera mejor sin cambiar la configuración de IIS?
Me doy cuenta de que podría escribir mi propia implementación (como digo en la pregunta) pero que se siente como volver a inventar la rueda. IIS y .Net ya saben que esta es una solicitud de archivo estático, por lo que debe haber una forma existente de hacerlo. – Keith