問題タブ [httpmodule]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - ローカリゼーションのための .net URL の書き換え、フォーム認証と loginUrl に関する問題
HttpModule を使用して、多言語サイトの URL を書き換えています。HttpModule では、BeginRequest イベントのハンドラーを追加し、カルチャ名を含むパスの最初の部分を探しています。
たとえば、/fr-ca/index.aspx は /index.aspx に書き換えられ、スレッドのカルチャと ui カルチャが 3084 に設定されます。これは正常に機能します。
フォーム認証を入力します。フォーム認証はマップされていない URL でも正常に機能しますが、ユーザーが承認されていない場合は、web.config の認証セクションで設定されている loginUrl にリダイレクトされ、要求された URL へのリダイレクトを処理するために ?ReturnUrl= クエリ文字列パラメーターが含まれます。ユーザーが認証されると、ページ。
ユーザーがデフォルト以外の言語でページを要求した場合、ここで 2 つの問題があります。
- loginUrl は、書き換えられる前にパスを無視します
- ReturnUrl パラメーターも生のパスを無視していました。
Request.RawUrl の代わりに Request.Url.PathAndQuery に相当します。
代わりに、AuthorizeRequest イベントでパイプラインにジャンプすることはできません。これは、複数の場所のパスを持つ 1 つの web.config ファイルを使用しているため、考えられるすべてのカルチャ値から保護する必要があるためです。これも最初の問題を修正しません。
リフレクターで FormsAuthenticationModule を調べたところ、#1 と #2 を解決するためにどこを変更できるかがわかりますが、もちろん封印されています。
私もたくさん閲覧しましたが、実行可能な解決策は見当たりません。
FormsAuthenticationModule は、UrlAuthorizationModule で生成された 401 ヘッダーをチェックしています。loginUrl ページでリファラー (空) を探すと、それが確認されます。
何かご意見は?
編集#1
IIS 6 を使用していますが、IIS 7 はオプションではありません。
編集#2
ローカル リソースを生成したときに (デザイン ビュー: [ツール] > [ローカル リソースの生成])、IDE がページ ディレクティブに以下を追加したため、ログイン ページは既定のカルチャ/UI カルチャを取得しませんでした。
culture="auto" meta:resourcekey="PageResource1" uiculture="auto"
vs.net 2008 ではこれに注意してください。少なくともこれにより、デフォルトのカルチャが参照されないという問題の 1 つが解決されますが、#1 と #2 はまだ未解決です。
編集3
パイプライン イベントの 1 つにジャンプして独自のリダイレクトを実行できることを望んでいましたが、System.Web.Security.UrlAuthorizationModule OnEnter メソッドの反映で、401 ヘッダーが設定されると、メソッドが application.CompleteRequest を呼び出すことがわかりました。お察しのとおり、EndRequest イベントに進みます。これは、FA モジュールがリダイレクトを実行するためにジャンプするものです。残念ながら、自分のリダイレクトを実行するために前にジャンプすることはできません! この問題に遭遇する人がこれ以上いないことに驚いています。
例:
フォーム認証によって保護されている物理フォルダー /members/ にメンバーのセクションがあります。
web.config には、次のものがあります。
と...
認証されていないユーザーが /members/ のインデックス ページを要求すると、FormsAuthenticationModule によって上記の認証セクションから loginUrl にリダイレクトされます。また、要求されたページに ?ReturnUrl パラメーターを追加します。
これは、ユーザーが既定のカルチャを使用して Web サイトを閲覧している場合に問題なく機能しますが、私の HttpModule は、パスの最初の部分にあるカルチャ名の存在に基づいてカルチャを設定します。
そのため、/fr-ca/members/index.aspx は /members/index.aspx に書き換えられ、カルチャ/UI カルチャがカナダ フランス語に設定されます。残念ながら、FormsAuthenticationModule は、元の URL ではなく、書き換えられた URL を使用して loginUrl ページにユーザーを送信します。そのため、カルチャ設定が失われ、リダイレクト URL が正しくありません。
@グレッグに役立つことを願っています
asp.net - クエリ文字列がない場合、HttpHandlerをスキップすることは可能ですか?
動的画像リサイザーをHttpHandlerとして作成しました。画像拡張子が付いているものはすべて自動的に呼び出されるため、たとえば次のようになります。
http://www.mysite.com/picture.jpg?width=200&height=100
ハンドラーを実行し、適切な応答ヘッダーを含むサムネイル画像を返します。ただし、クエリ文字列なしで呼び出された場合、ハンドラーにリクエストを「パススルー」させたいと思います。
http://www.mysite.com/picture.jpg
ハンドラーを介して実行しなかった場合のように、ヘッダー情報を含む画像を返すようにします。これは、ヘッダー情報を手動でコーディングしなくても可能ですか(ファイルストリームを開いて最終書き込み日などのデータを読み取る必要があります)、またはハンドラーをHTTPModule
代わりに変換する必要がありますか?
configuration - バグ:IIS7管理リクエスト
(IIS構成に関するものなので、この質問をServerFaultにも投稿する必要があるかどうかわかりませんか?)
IIS7では、次の方法で、管理対象コンテンツに対して実行するようにモジュールに指示できます(したがって、静的コンテンツの提供が高速化されます)。
だが。要求されたURLにファイル名(拡張子付き)も含まれている限り、これは問題なく機能します。省略した場合、IIS7は静的コンテンツが必要であると見なし、管理対象モジュールは実行されません。
default.aspx
IIS7のデフォルトのドキュメントを手動で設定した場合、最初のドキュメントはです。違いはありません。違いはありません。私には、これはバグのように見え、歩き、聞こえます。そしてそれはバグです!なんで?私が最初のものを要求するとき、それは管理された要求ですからね。もちろん。ただし、IIS7はそれを静的リクエストとして扱います。それで?バグです。このリクエストは管理対象として扱われる必要があります。
ファイル名を含まないURLリクエストに対してマネージドハンドラーを実行するようにIIS7を説得するにはどうすればよいですか?
考えるのを手伝ってください
私が考えることであなたを少し助けさせてください:私が再注文するならばsystem.webServer/handlers
、私はこれを解決することができると確信しています。StaticFile
を指す最後のハンドラーの前に、StaticFileModule
ディレクトリ要求で統合asp.netハンドラーを実行する必要がありますDefaultDocumentModule
。DirectoryBrowsingModule
または、ディレクトリ要求にデフォルトのドキュメントを追加する独自のハンドラーを作成します。私はこれらの1つがそれを解決するはずだとかなり確信しています。しかし、どのように構成/開発する必要がありますか?
c# - C#ASP.NET HttpModules:HttpApplicationイベント
WebアプリケーションにHttpApplication(Global.asax)があります。これを使用して、未処理の例外をキャッチしてログに記録し、WebFormURLRoutingを設定します。これはすべて機能しますが、このコードをアプリケーションフレームワークに移動したいと思います(つまり、Global.asax.csにはありません)。
フレームワークでHttpApplicationクラスを作成しようとしましたが、イベントをオーバーライドできないようです。とにかく、私はこれらのイベントを消費する代わりにHttpModuleを使用できると信じています、これを行います:
1)Global.asaxの必要性を完全に排除しますか?
2)これはスケールアップにどのように影響しますか?つまり、最終的にはWebファームでアプリケーションを実行します
3)ファイルのアップロードやファイルのダウンロードなどの他の処理を行うHttpHandlerがありますが、使用するHttpModule / HttpHandlerの数に制限はありますか、それともオーバーヘッドを減らすためにこれらを組み合わせる必要がありますか?
コメントをいただければ幸いです
c# - HttpResponse フィルターが何も返さない
WebResource.axd ハンドラーの呼び出しをインターセプトするために使用している HttpModule を作成したので、javascript で後処理を実行できます。
モジュールは Response.Filter ストリームをラップしてその処理を実行し、その変更を基になるストリームに書き込みます。
私が抱えている問題は、スクリプトがブラウザに返されないことです。
したがって、パススルーとして機能する非常に単純な例として、モジュールは次のようになります。
受け取ったものを出力するだけの ResourceFilter は次のようになります。
モジュールとフィルターが呼び出されていることをアタッチして確認できますが、WebResource.axd URL を参照しても何も返されません。
このパターンを使用して、aspx ページで処理を実行するモジュールを実装しましたが、問題なく動作します。この作業を妨げる WebResource.axd との相互作用について何かがあるようです。
asp.net - 静的ファイルのHTTPModuleがIIS6で実行できない場合があります
私は、コンテンツタイプヘッダーに基づいてCSS、JS、およびHTMLファイルをクリーンアップ、圧縮、および最小化するHTTPモジュールを持っています。それは私のステージング環境とローカルホスト(ISS7、クラシックパイプラインモード)でうまく機能します。IIS 6(本番)では、信頼性がありません。散発的に、この静的ファイルはasp.netによる処理を停止し、デフォルトのIISハンドラーに戻っているように見えます。web.configに触れるか、IISRESETを実行すると、しばらくの間、正常に動作し始めます。モジュールがこの「奇抜な状態」になった場合でも、.aspxファイルは期待どおりにモジュールを実行しています。したがって、モジュールは問題ではなく、私たちが見ているのはIISの問題であると私はかなり確信しています。
- すべての動詞に対してaspnet_isapi.dllによって処理されるように、IIS 6にマップされたHTML、JS、およびCSSファイルがあります。
- 私のweb.configでは、これらの静的ファイルを、すべての動詞のハンドラーセクションでSystem.Web.StaticFileHandlerによって処理されるように設定しました。
- HTTPモジュールはweb.configにも接続されています。
何か案は?とりあえず、本番WebサーバーをIIS7にアップグレードすることは避けたいです。
asp.net - HttpModule の Response.Redirect
HttpModule でカスタム ページにリダイレクトできますか?
aspxページがロードされたときにJavaScriptコードを実行するHttpModule Aがあります。クライアントのブラウザーが Cookie をサポートしているかどうかをサーバー側のコードで確認したいと考えています。そのコードを HttpModule A に配置できますか? もしそうなら、どのイベントで?または、両方の目的で新しい HttpHandler が必要ですか?
また、HttpModule (response.redirect なし) で Cookie を確認することは可能ですか? 私が見たすべてのソリューションには、Cookie を設定するためのページと、Cookie が実際に作成されたかどうかを確認するためのページの 2 つのページが必要です。1 か所で Cookie を確認する方法があればいいのにと思います。
前もって感謝します
c# - HttpModule を使用してローカル以外のネットワーク要求に対して IIS でクライアント証明書を要求する
ローカル ネットワーク以外からの要求に対して、IIS のサイトでクライアント証明書を要求する必要があります。ローカル リクエストでは、クライアント証明書は必要ありません。IIS でこれを行う方法はありますか? クライアント証明書を許可するが必要としないようにIISを構成し、元のIPアドレスをチェックしてクライアント証明書を含まないローカルネットワーク以外のものをキックバックするカスタムHttpModuleを使用することを考えていました。
それはうまくいきますか?どのように問題を解決しますか?
c# - カスタム C# HttpModule 無限リダイレクト ループ
すべてのファイル タイプからの要求を処理するカスタム c# HttpModule を作成しています。簡単な概念実証として、Web 構成の httpModules セクションへの参照を追加してモジュールをセットアップし、デモ IIS Web サイトのアプリケーション拡張を aspnet_isapi.dll への参照とともに追加して、現在 ". htm」ファイル
ただし、「OnBeginRequest」イベント (以下のコード) に重要なコードがない場合でも、無限のリダイレクト ループが発生します。XP で IIS 5 を使用しています。
これまでのところ、私は ASPX ファイルで使用する HttpModule の例しか見ていませんが、どのファイル タイプに対しても設定できますか?