我有一个 Global.asx 文件,需要进行自定义身份验证、审核和分析。这是必需的,因为它支持基于 SAML 的 SSO 系统并且需要覆盖正常的 .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 配置?