ASP.NET Identityを使用する標準のMVCプロジェクトでは、不正な要求がログインページにリダイレクトされ、ログインReturnUrl
が成功した後、最初に要求されたページにさらにリダイレクトできるように、パラメーターがクエリ文字列に追加されます。
アカウントコントローラーにはRedirectToLocal
、ReturnUrl
パラメーターがローカルURL(つまり、同じWebサイトのページ)を参照している場合にのみ、その2番目のリダイレクトを実行するために使用されるという名前のメソッドが含まれています。このチェックを実行するために非常に単純なアプローチを使用し、たとえば、URLが有効なURLであるかどうか、またはアクションにルーティングできるかどうかをチェックしません。
私の場合、ログアウトページ(!)など、絶対にリダイレクトしたくないURLがいくつかあります。また、正常にルーティングできるURLのみにリダイレクトしたいと思います。
これを実現するために、URLをルートに変換するようにコードを変更しました(これと同様の手法を使用)。これRouteData
により、コントローラーとアクションの名前を調べることができるオブジェクトが得られます(したがって、特定のブロックされたアクションを除外できます)。
これをさらに進めて、POSTデータを期待するコントローラーアクションを除外したいと思います(それらにリダイレクトできないため)。そう...
コントローラ名とアクション名が与えられた場合、これがGETアクションかPOSTアクションかをどのように判断できますか?
実際にアクションを実行する前の時点まで、MVCフレームワークが通常行うルーティング/バインディングを呼び出す方法はありますか?
私はあなたがやりたいことをするための組み込み機能があるとは思いません。
私はちょうどで簡単に見なければならなかったASP.NET MVC 5
(ソースをSystem.Web.Mvc.dll
(使用)dotPeekを場所を確認するために)[HttpPostAttribute]
使用されています。率直に言って、アクションメソッドを使用して着信リクエストを処理できるかどうかを判断することは、その場で行われます。のように、その決定に関係する高レベルの拡張メソッドまたはヘルパークラスはありません。少なくとも、私が見ることができるものから明らかなことは何もありません。アクションメソッドがリクエストを処理できるかどうかを判断するために使用されている内部メソッド/ヘルパーのように見えました。
主な目標をどのように達成できるかについてはよくわかりませんが、ソースコードをスキャンして見つけたものについては触れておきたいと思いました。当然のことながら、ソースを自分で自由に見てください。私が見逃したものを見つけるかもしれません。その場合、将来同じニーズを持つ可能性のある他の人を助けるために、ここにあなたの発見を投稿してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加