共有ポイント サイトに http モジュールがあり、このモジュールはカスタム クラスをインスタンス化してセッションに追加し、サイトのその他の初期処理を行います。ただし、すべてのリクエスト タイプ (.aspx、.js、.png、.jpg) に対して http モジュールが呼び出されていることに気付きました。
.net 固有のページ タイプに対してのみ http モジュールを呼び出す方法はありますか?
共有ポイント サイトに http モジュールがあり、このモジュールはカスタム クラスをインスタンス化してセッションに追加し、サイトのその他の初期処理を行います。ただし、すべてのリクエスト タイプ (.aspx、.js、.png、.jpg) に対して http モジュールが呼び出されていることに気付きました。
.net 固有のページ タイプに対してのみ http モジュールを呼び出す方法はありますか?
私はもう少し研究をしました、そして私が意図していることをする方法がないようです。リクエストの種類を確認して、そこからキャンセルする必要があります。
回答ありがとうございます。
D
このタイプの http ハンドラーの展開の容易さ (およびハンドラーの web.config エントリを展開する必要がないという事実) は気に入っていますが、_layouts ディレクトリを使用したくない場合や、カスタム ファイル拡張子を持つには、同様に機能する別の方法があります (ただし、IIS で 1 つの手動構成手順が必要なため、「ノー タッチ展開」には適していない可能性があります)。
1) asp.net アプリケーションの場合と同様に、http ハンドラーを作成します。アプリ プールにいるので、SharePoint DLL への参照を追加し、オブジェクト モデルを操作できます。
2) web.config にエントリを追加して、ハンドラーを登録し、使用する拡張機能を定義します。いいえ:
3) [IIS] > [Web サイトのプロパティ] > [ホーム ディレクトリ] > [構成] > [マッピング] を使用して、IIS でカスタム拡張機能を定義します。
この場合、ハンドラーが取得する .proxy 拡張子を定義しました。このハンドラーは .NET アセンブリであるため、.proxy 要求を .net isapi dll (C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll) にルーティングするためのマッピングを追加する必要があります。必ずチェックを外してください」
http://msdn.microsoft.com/en-us/library/bb457204.aspxのコメントから
拡張子でリクエストをフィルタリングする方法の簡単な例を次に示します。以下の例では、特定の拡張子を持つファイルの処理から除外しています。
public class AuthenticationModule : IHttpModule
{
private static readonly List<string> extensionsToSkip = AuthenticationConfig.ExtensionsToSkip.Split('|').ToList();
// In the Init function, register for HttpApplication
// events by adding your handlers.
public void Init(HttpApplication application)
{
application.BeginRequest += new EventHandler(this.Application_BeginRequest);
application.EndRequest += new EventHandler(this.Application_EndRequest);
}
private void Application_BeginRequest(Object source, EventArgs e)
{
// we don't have to process all requests...
if (extensionsToSkip.Contains(Path.GetExtension(HttpContext.Current.Request.Url.LocalPath)))
return;
Trace.WriteLine("Application_BeginRequest: " + HttpContext.Current.Request.Url.AbsoluteUri);
}
private void Application_EndRequest(Object source, EventArgs e)
{
// we don't have to process all requests...
if (extensionsToSkip.Contains(Path.GetExtension(HttpContext.Current.Request.Url.LocalPath)))
return;
Trace.WriteLine("Application_BeginRequest: " + HttpContext.Current.Request.Url.AbsoluteUri);
}
}
構成ファイルで、除外する拡張機能を指定し、モジュール内の拡張機能のリストを開始します。
IIS では、ハンドラーが特定の拡張機能に関連付けられるように設定して、ハンドラーがその拡張機能にのみ適用されるようにします。JavaScript ファイルは処理しないでください。
モジュール/ハンドラーを何らかの方法で SharePoint と統合することを検討している場合は、この記事も参照してください。
最後の Uri.Segments のコンテンツの拡張子をチェックすることで、(高価な SharePoint オブジェクト モデルを呼び出す前に) HttpModule を使用して非常に軽量な方法でこれを行うことができます。
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
Uri uri = app.Request.Url;
string lastSegment = uri.Segments[uri.Segments.Length-1];
.. check your extension here an do nothing if it doesn't match.
..
}
これを SharePoint の「TinyURL」実装で使用して、通常の URL のパフォーマンスへの影響をほぼゼロにします。