コントローラで完全なリクエストURL(クエリ文字列を含む)を取得するにはどうすればよいですか?それは私のURLとフォームパラメータを連結することの問題ですか、それともより良い方法がありますか?.
this の質問をチェックしましたが、MVCには適用できないようです。
私が間違っている場合は修正してください。
より詳細な情報:
SearchController.AdvancedSearch()
への呼び出しは、約15個のオプションパラメーターを持つフォームから発生します。パラメーターの数と、オプションのパラメーターをクリーンな方法で渡す方法(私は考えられない)のため、コントローラーで処理されるキャッチオール文字列を探しました。
ここで、パンくずがクリックされたときにまったく同じ結果を取得できるように、コントローラーに呼び出しをブレッドクラムコンポーネントに保存してもらいたい(引数のすべてではなく、すべてを含む)。これを行うには、request.URL全体クエリ文字列を含むが必要です。
Request.RawURL
、request.URL
etcこのクエリ文字列は含まれません。実際、現在は単純な機能を実行しています。
String.Format("{0}/{1}", request.Url, request.form)
これにより、いくつかの奇妙な結果(送信ボタンの値など)が得られますが、機能します。このthisいハックを減らす方法について提案があれば、教えてください。
現在のリクエストの場所はわかっていますが、未処理のURLはどこにも見つからないようです。それらはすべてクエリ文字列から奪われており、私もそのビットが必要です。
コントローラーは、BreadCrumb
コンポーネント内のURLのコレクションを更新します。したがって、リクエストURLが必要です。この問題にどのように対処しますか?
MVC5:Request.RequestUri.PathAndQueryを使用します
HttpContext.Current.Request.RawUrl
HttpContext.Current.Request.QueryString
2番目の質問に関する限り。ユーザーが行ったURLやクエリ文字列情報などを追跡する代わりに。呼び出されたコントローラーとアクションを追跡します。これにより、Requestオブジェクトの必要性が完全になくなります。
次を使用して、現在のRequestオブジェクトを取得できます。
HttpContext.Current.Request
ただし、質問する必要があります-なぜリクエストURLが必要なのですか?これを行うことで、コントローラーをRequestオブジェクトに依存させることになり、ユニットテストの記述が非常に難しくなります。
Request.RawUrl
このプロパティを使用すると、すべてのURLが返されます。
コントローラー内では、Request.RawUrl
。