私はカスタム認証、監査、プロファイリングの作業を行う必要のあるGlobal.asxファイルを持っています。これは、SAMLベースのSSOシステムをサポートし、通常の.Net認証(SAMLまたは複合認証をサポートしない)をオーバーライドする必要があるために必要です。0120 .js
,.css
.png
などApplication_BeginRequestの間に静的ファイルを確認しますか?
カッシーニ/ WebDevとIIS7ではそうです。
私が持っていたいのは、(残念ながら存在しません)のような単純なチェックで、静的ファイルを特定することです。
これはかなり簡単に書くことができますが、既に存在していなければならないもののように感じられます。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の設定を変更しないと良い方法がありますか?
私は自分の実装を書くことができますが(私が質問で言うように)、それはホイールを再発明するように感じます。 IISと.Netはこれが静的なファイル要求であることを既に知っているので、これを行う既存の方法があるはずです。 – Keith