2017-08-01 22 views
0

こんにちは私はAsp.net Coreで最初のプロジェクトを作成しており、前のページにログインした後にリダイレクトする必要があります。たとえば、彼がページ "About"を見ると、彼はログインしたいと思うでしょうし、ログイン後、私は彼が "About"ページにリダイレクトする必要があります。 ここにコントローラのコードがあります。ログイン後に前のページを取得する方法

// 
    // GET: /Account/Login 
    [HttpGet] 
    [Route("/Account/Login")] 
    [AllowAnonymous] 
    public IActionResult Login(string returnUrl = null) 
    { 
     try 
     { 
      if (_signInManager.IsSignedIn(User)) 
       _signInManager.SignOutAsync(); 


      ViewData["ReturnUrl"] = returnUrl; 

      return View("Login"); 
     } 
     catch (Exception e) 
     { 
      return ExceptionActionResult(e); 
     } 
    } 

私はRequest.Headers ["Referer"]を使用しようとしました。問題は、前のページがログインページであることです。私は中//ログインを取得し、この方法を入れてみましたが、その後、私はあなたが何かを必要とする場合は、//ポストログイン

// POST: /Account/Login 
    [HttpPost] 
    [Route("/Account/Login")] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) 
    { 
     try 
     { 
      //Nesmi byt prihlasen 
      if (_signInManager.IsSignedIn(User)) 
       return ErrorActionResult("User is already Signed"); 

      // string var = Request.Headers["Referer"]; 
       string var = Request.Headers["Referer"].ToString(); 

      ViewData["ReturnUrl"] = returnUrl; 
      if (ModelState.IsValid) 
      { 

       set lockoutOnFailure: true 
       var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: true); 
       if (result.Succeeded) 
       { 

        return RedirectToLocal(returnUrl); 
       } 
       if (result.IsLockedOut) 
       { 
        _logger.LogWarning(2, "someString"); 
        ModelState.AddModelError("UserName", "someString"); 
        return View("Lockout"); 
       } 
       else 
       { 
         _logger.LogWarning(2, "someString"); 
         ModelState.AddModelError(string.Empty, "Invalid Password or Mail"); 
        } 


        return View(model); 

      } 

      // If we got this far, something failed, redisplay form 
      return View(model); 

     } 
     catch (Exception e) 
     { 
      return ExceptionActionResult(e); 
     } 
    } 

に文字列を送信する方法を知らないか、あなたが理解しない場合、私は私に尋ねます詳細については。私はどんな助けでも満足しています。

答えて

0

以下のように試すことができます。ユーザーがページについてをクリックしたときについて

<a href="/Home/About">About</a> 

以下のように見えるためのアクションリンクは今、彼は以下であるページにログインするためにリダイレクトされ、それはURLがAbout pageへのリンクになりますGETリクエストだからと仮定し、

enter image description here

:それは string returnUrl

public ActionResult Login(string returnUrl) 
    { 
      ViewBag.ReturnUrl = returnUrl; 
      return View(); 
    } 

を参照のURLに捕獲されます

リダイレクトに関する限り、以下はlogin.cshtmlのコードです。フォームがPOSTEDのときは、どのようにreturnURl as Anonymous Objectを送信しているかに注目してください。

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = 
ViewBag.ReturnUrl }, FormMethod.Post)){ 
     @*LOGIN PAGE RAZOR LOGIC*@ 
} 

ログインPOSTコントローラのアクション

[HttpPost] 
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { 
     return RedirectToLocal(returnUrl); 
    } 
関連する問題