2009-04-23 9 views
7

ASP.NETでは、を実際に生URLにする方法はありますか?ASP.NET:*実際の生URLを取得する

たとえば、ユーザーが「http://example.com/mypage.aspx/%2F」を参照すると、「http://example.com/mypage.aspx//」ではなく「http://example.com/mypage.aspx/%2F」を取得したいと考えています。

私はもちろん、それを行うためのきれいな方法が好きですが、私はリフレクションやあいまいなプロパティへのアクセスを使ってハッキーなアプローチで暮らすことができます。

現時点では、私はAuthorization-header(動作しています)にuriを使用しようとしていますが、常にそこにいることに頼ることはできません。

EDIT:

私が本当にやりたいことは、 "http://example.com/mypage.aspx/%2F" と "http://example.com/mypage.aspx/%2F%2F" を区別できるようにすることです。

ASP.NETは、最初に "%2F%2F"を "//"に変換してからスラッシュを1つのスラッシュに変換するようです。

だから、再エンコードするだけでは機能しません。

答えて

6

次のコードは、私の作品:

IServiceProvider serviceProvider = (IServiceProvider)HttpContext.Current; 
HttpWorkerRequest workerRequest = (HttpWorkerRequest)serviceProvider.GetService(typeof(HttpWorkerRequest)); 
string realUrl = workerRequest.GetServerVariable("HTTP_URL"); 

これは、IIS上で実行されており、f.xでは実行されていない場合にのみ機能することに注意してください。 ASP.NET開発サーバー!

別のスレッドでは答えはLucero、スレッドに私を指しているのはZhaphです。

+0

これは適切な解決策です。パスにエンコーディングがあるときの問題を解決します。サーバー変数のHTTP_URLにはデコードされたバージョンが表示され、このソリューションは正しいエンコードされたバージョンを提供します。 –

+0

これはIIS Expressでも期待される結果を返します – Vivelin

1
Server.HtmlEncode(Request.RawUrl); 

生のURLは、ドメイン情報に続くURLの一部として定義されます。 URL文字列http://www.contoso.com/articles/recent.aspxでは、生のURLは/articles/recent.aspxです。未処理のURLには、クエリ文字列(存在する場合)が含まれます。

も参照してください。link text

+0

リクエスト内のすべてのURLはすでに削除されている可能性がありますが、Request.ServerVariables ["HTTP_URL"]はより正確です。 –

0

さて、あなただけのバックURLエンコードバージョンにそれをエンコードすることができます。

0

私はここでテストすることはできませんが、これは何が必要かもしれません:

Request.Url.AbsoluteUri 
0

が要求からURLを取得し、でurlencodeのみクエリ文字列の一部と、その後

1

Request.RawUrl戻りますそれらを連結アプリケーション相対パス(クエリ文字列情報を含む)はRequest.Urlは完全パス(クエリ文字列情報を含む)を返します。

詳細については、「Making sense of ASP.NET paths」を参照してください。

6

私はそれが唯一のIISで動作しますので、これをテストすることができませんでしたし、ないのVisual Studioの一部であり、ASP.NET開発サーバーが、試してみてください。

でRequest.ServerVariables [「HTTP_URL」]

+0

これは私のために期待される結果を返しますが、HTTP_HOSTとHTTP_QUERYを組み合わせて残りのURLを取得する必要があります。 –

関連する問題