ASP.NETで取得したURL書き換え前の元のアドレス

3449 ワード

ASP.NETでURLを使って書き換える場合はHttpContext.Requestは書き換えられたアドレスを取得します.このアドレスがクライアント(例えばRedirect)に返される場合、私たちは一般的に書き換える前の友好的なアドレスを望んでいます.
通常の使用シーンでは、ユーザーがログインしてアクセスする必要があるページがある場合、現在のアクセスユーザーがログインしているかどうかをコードで判断し、ログインしていない場合はログインページにリダイレクトし、現在のWebサイトをUrlパラメータを介してログインページに渡します.URLを使用して書き換える場合はRequest.Url.AbsoluteUriは現在のウェブサイトを取得し、ユーザーがログインして開いたのは書き換えたアドレスであり、これは正常な使用に影響しないが、ユーザー体験とURL統一の観点から、書き換え前のアドレスであることを望んでいる.
以前は、開発中もこの問題に悩まされていましたが、jsからログインページ(location.hrefで現在のWebサイトを取得)にリダイレクトしたり、コードに手動で返信アドレスを書いたりするしかありませんでした.
Requestから解決策を見つけましたHeadersで書き直す前のURLを見つけます.
1)書き換えコンポーネントがISAPIである場合Rewriteは、書き換えられたURLにアクセスすると、Headersにデータが追加されます.KeyはX-Rewrite-URLで、値は書き換え前のURLです.
2)書き換えコンポーネントがIIS独自のURL Rewriteモジュールを使用している場合、Headersに追加された情報のKeyはX-Original-URLとなる.
これにより、書き換え前のWebサイトを簡単に入手できます.サンプルコードは次のとおりです.

  
if (Request.Headers[ " X-Rewrite-URL " ] != null )
{
Response.Write(
" http:// " + Request.Url.Host + Request.Headers[ " X-Rewrite-URL " ]);
}
else if (Request.Headers[ " X-Original-URL " ] != null )
{
Response.Write(
" http:// " + Request.Url.Host + Request.Headers[ " X-Original-URL " ]);
}

余談:
  ISAPI_RewriteとIISのURL Rewriteモジュールには小さな違いがありますが、ISAPI_からRewriteがURL Rewriteに移行するのは大変迷惑です.たとえば、http://www.cnblogs.com/cmt/このサイト、ISAPI_Rewriteは"/cm/"でマッチングしますが、URL Rewriteモジュールは"cmt/"でマッチングします.スラッシュが1つ違いますが、移行時にISAPI_で変更する必要があります.Rewriteに書かれている各正規表現.また、URL RewriteにはISAPI_Rewriteはルールの機能を導入していますが、この場合は考慮していません.
みんなの元旦の楽しみを祈ります!