ihttpmoduleで「このコンテキストではリクエストは利用できません」
-
27-09-2019 - |
質問
httpcontext.current.requestオブジェクトにアクセスしようとすると、その例外が得られます。
私は回答を見ました L1, L2 と L3 ...だから...私の質問は次のとおりです。
今、世界の何のために?
通話が5月に入るたびにヒットするモジュールを開発したかったので、URLにアクセスしたURL、ユーザーIPアドレスなどを記録できますが、IIS7ではもうできないようです。回避策はありますか? (「クラシックモード」への切り替え以外)。
Alt Text http://userserve-ak.last.fm/serve/126/24432467.jpg
乾杯。
解決
いつやってるの?モジュールイベントにありますか?統合されたプールでも完全に実行可能である必要があります。ボトムライン統合モードで実行するときにASP.NETフックがIISにどのように「より多くのファーストクラス」になるかについての変更があります。これは、特定のイベントが以前に発砲することを意味します。たとえば、Application_startは実際のリクエストのコンテキストの外で発砲します。他の例は、IISが認証される前でさえ冒険が行われているので、Windows認証アイデンティティをBeginRequestに持っていることを期待しています。
アプリケーションが古い悪い動作に依存している場合、AppPoolを変更してクラシックモードで実行することができ、正常に機能します。
beginrequest、endrequest、postauthorizerequestなど、リクエスト固有の通知でリクエストを取得できるはずです。また、httpcontext.currentを使用することをお勧めします。特にモジュールのコンテキストで、他の方法で直接コンテキストを取得するため、たとえばBeginRequestを処理する場合は、できるはずです。
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
そして、あなたはルックアップを保存します。
あなたの説明から、beginrequestとendrequestを処理するモジュールを実装する必要があるように聞こえます。
他のヒント
私はこれを元々コメントとして投稿しました。それは実際には答えではありませんが、あなたが「回り」を探しているのを見ました。
/app_code/basepage.vb
Public Class BasePage : Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
''# Do all your logging here
End Sub
End Class
/default.aspx.vb
Partial Class _Default : Inherits BasePage
''# This is simply your code behind for each page (notice it inherits BasePage)
''# You can still have your Page_Load events along with custom methods in here,
''# and it will not affect the logging portion of your app.
End Class
基本的に、あなたがしていることは、どのページがロードされていても、すべてのページロードで同じ作業を行う単一のクラスを作成することです。その後、アプリケーション内の各ページは BasePage
それをアクティブにするためのクラス。