4

私は古い ASP.NET Web フォーム アプリを ASP.NET MVC 4 に移行しています。つまり、私の ASP.NET Web フォーム アプリは、次のコード行を使用して、ログイン時にユーザーをリダイレクトしました。

FormsAuthentication.RedirectFromLoginPage(username, true);

このコードをコピーして貼り付けるだけでよいと思いました。ただし、ユーザーを「default.aspx」にリダイレクトしようとしていることに気付きました。この呼び出しに相当する MVC は何ですか?

ありがとうございました!

4

4 に答える 4

3

フォーム認証は通常returnUrl、クエリ文字列パラメーターとして を提供します (これFormsAuthentication.RedirectFromloginPage(username, true)を使用していると思います)。そうは言っても、 で受け取るログイン アクションにパラメーターを追加しreturnUrl、それをログイン アクションで使用します。

[HttpPost]
public ActionResult Login(LoginViewModel model, String returnUrl)
{
    if (ModelState.IsValid)
    {
        // perform login
        if (YourFormsAuthentication.YourLoginMethod(mode.username, model.password))
        {
            //
            // Set auth cookie, log user in, etc.
            //

            // Now check for returnUrl and make sure it's present and
            // valid (not redirecting off-site)
            if (!String.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
            {
                return Redirect(returnUrl);
            }
            // no returnUrl provided, direct them to default landing page
            return RedirectToRoute("Home");
        }
        else
        {
            ModelState.AddError("", "Username or password are incorrect.");
        }
    }
    return View(model);
}
于 2013-01-29T13:46:19.090 に答える
1

コントローラのログオンメソッドで、パラメータ文字列returnUrlを追加します。

次に、それが空かnullかを確認します。リダイレクトしない場合。

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
       // Do your login
    // if success
                if (!String.IsNullOrEmpty(returnUrl))
                {
                    return Redirect(returnUrl);
                }
}

あなたの見解では、returnUrl(Request.Urlになります)も渡します

<%: Html.ActionLink("Log On", "LogOn", "ControllerName", new { returnUrl = Request.Url }, null)%>
于 2013-01-29T13:43:27.143 に答える
0

ここに完全なサンプルがあります: http://www.c-sharpcorner.com/UploadFile/cd3310/using-mvc-Asp-Net-tools-create-simple-login-form/

特定のアクションを持つコントローラで表示

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Login(YourModel model)
    {
        if (!ModelState.IsValid)
        {
            return View("Login", model);
        }

        return RedirectToAction("Index");
    }
于 2013-01-29T13:47:14.330 に答える
0

MVC 4 では、新しいアプリケーションを作成し、インターネット アプリケーションのオプションを選択すると、テンプレートはフォーム認証のためにすべてを配線し、SimpleMembership プロバイダーを使用するように設定します。これにより、ユーザー プロファイルのカスタマイズが容易になり、OAuth を簡単にプラグインするためのサポートが追加されます。 . web.config に次のエントリが必要です。

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

これは、ユーザーが認証または承認されていない場合に loginUrl にリダイレクトするようにアプリケーションに指示します。次に、コントローラーまたはアクションでAuthorizeAttributeを使用します。役割ベースの承認を使用する場合、または役割なしで使用する場合は、この属性に役割を追加できます。ここでは、HomeController の Contact アクションに AuthorizeAttribute を追加しました。

    [Authorize(Roles="Admin")] 
    public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";

        return View();
    }

このアクションは、MVC 4 Internet テンプレートによって作成された既定の HomeController で行われます。ユーザー エクスペリエンスは、ホーム ページの [連絡先] タブをクリックし、ログインしていない場合、ログオン ページにリダイレクトされるというものです。ログオンに成功すると、連絡先ページにリダイレクトされます。そのため、MVC 4 インターネット アプリケーションではすべてが接続されており、リダイレクトを明示的に処理する必要はありません。SimpleMembership プロバイダーのカスタマイズの詳細については、このブログを参照してください。

于 2013-01-29T14:06:53.867 に答える