ASP.Net MVC-ルートにリダイレクトするとリダイレクトループが発生する
-
04-07-2019 - |
質問
これはおそらく簡単な質問の1つです。ユーザーが正常に認証された後、ユーザーをリダイレクトするか、ログインページに戻そうとしています。しかし、成功ページは別のルートにあり、リダイレクトを機能させることができません。
Globals.asaxのルートは次のとおりです。
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Login", .action = "Index", .id = ""} _
)
routes.MapRoute( _
"Stuff", _
"{controller}/{action}/{id}", _
New With {.controller = "Stuff", .action = "Index", .id = ""} _
)
LoginController.vb
と StuffController.vb
の2つのコントローラーがあります。 Views / Login / Index.aspx
ファイルには、コードを含む単純なフォームが含まれています。
<form method="post" action="/Login/Authenticate">
LoginController
には次のコードが含まれています。
Function Authenticate() As RedirectToRouteResult
' authentication code commented out ;o)
Return RedirectToRoute("Stuff")
End Function
そして、StuffControllerには以下が含まれています:
Function Index()
' show stuff..
Return View() ' return /Views/Stuff/Index.aspx
End Function
これまでに試したことがあります:
- Authenticate()関数
- ActionResult()としての関数Authenticate()
- RedirectToRouteResult()としての関数Authenticate()
これらはすべて、ブラウザでリダイレクトループタイムアウトを引き起こします。何が足りないのですか?
解決
Stuffルートがデフォルトのルートとまったく同じ形式である可能性があるため、電話をかけるとき
Return RedirectToRoute("Stuff");
結果のURLの形式は、{controller} / {action} / {id}です。例:ログインコントローラの認証アクション内にいるため、再度ログイン/認証します。
試す
RedirectToAction("Index", "Stuff");
役立つこと。
他のヒント
正しい答えは良いですが、:
- コントローラ/アクション名をStaff / Indexから別のものに変更したい場合はどうしますか?
-その後、global.asaxだけでなく、テクニックを使用したすべての場所でも値を変更する必要があります。
私の提案:
return RedirectToRoute("Stuff", (RouteTable.Routes["Stuff"] as Route).Defaults);
今、この場合、それに応じてStuff / Indexであるコントローラー/アクションの名前を渡しません。これにより、変更を簡単に管理できます。
認証Cookieを設定している場所、またはユーザーが何らかの方法で認証されたものとしてマークしている場所を確認できません。それはあなたが省略したコードにありますか?
試用
routes.MapRoute( _
"Stuff", _
"",_
New With {.controller = "Stuff", .action = "Index", .id = ""} _
)