2

私はMVC-3アプリケーションに取り組んでいます。私のアプリケーションでは、ユーザーが として装飾されたビューにアクセスしようとすると[Authorize]、ユーザーはログオンビューにリダイレクトし、そこでユーザーは資格情報を入力し、承認されたビュー (ユーザーが行きたい場所) にリダイレクトします。

問題 :ユーザーがアカウントを持っていない場合、登録リンクを使用してアカウントを作成します。ただし、新しいアカウントを作成した後、ユーザーはホームにリダイレクトされます。そして、ホームページではなく、承認されたビューにリダイレクトしてもらいたい. どうやってやるの?

4

4 に答える 4

0

リダイレクトの前にユーザーが見たかった承認ページをユーザーのセッションに保存できます... Request.Url.AbsoluteUri. フィルターを使用してみてください。

于 2012-07-29T16:53:35.753 に答える
0

問題の簡単な解決策の 1 つは、現在の URL を次のようにログイン ページ (登録リンク内) からクエリ文字列に渡すことです。

@Html.ActionLink("Register", "Index", "Account", new { returnUrl Request.Url.PathAndQuery }, null)

したがって、コントローラーメソッドパラメーターで他のようにこのreturnUrlをキャッチできるようになり、ユーザーをこのreturnUrlにリダイレクトできます

于 2012-07-29T16:54:06.247 に答える
0

ログオンビューからURLを渡してコントローラーを登録し、ユーザーが登録するまでコントローラーに渡してからリダイレクトする必要があります。かなり面倒です。

于 2012-07-29T16:40:30.083 に答える
0

から派生するクラスを作成しAuthorizeAttribute、メソッドをオーバーライドしますOnAuthorization。このメソッドでは、適切な承認チェックを行い、ユーザーが承認されていない場合は、次のコードを実行します。

var route = new RouteValueDictionary(new { controller = "Account", action = "LogOn", returnUrl = filterContext.RequestContext.HttpContext.Request.RawUrl });
filterContext.Result = new RedirectToRouteResult(route);

次に、認証コントローラーの Login アクションで、 という名前のパラメーターを追加しますreturnUrl。ユーザーが適切な認証情報を提供したことを確認したら、次を実行します。

if (Url.IsLocalUrl(returnUrl))
     return Redirect(returnUrl);

これを Global.asax.cs の Application_start に追加して、MVC で使用されるクラスを登録してください。

GlobalFilters.Filters.Add(new AuthorizationAttribute());

AuthorizationAttribute、派生クラスの名前です。

于 2012-07-29T16:46:34.840 に答える