2017-05-09 1 views
-3

J'essaye d'obtenir l'url précédente sur la session vide par exemple si un utilisateur ouvrent une page Web directement en tapant l'URL par exemple. xyz.com/dashboard/ puis parce qu'il n'était pas connecté et la session était vide, il sera donc redirigé vers xyz.com/login/ où il entrera ses informations d'identification et sera automatiquement redirigé vers xyz.com/dashboard/Comment obtenir l'URL précédente sur la session expire dans ASP.NET MVC

Merci

+0

Bienvenue à StackOverflow s'il vous plaît jeter un oeil à http://stackoverflow.com/help/comment demander sur la façon de poser des questions. Il est peu probable que vous obteniez une bonne réponse à cette question. – gsharp

+0

Je viens de réinitialiser votre réputation, s'il vous plaît prendre le temps d'améliorer votre question (manque principalement d'informations montrant votre effort). –

Répondre

1

Rediriger l'utilisateur vers xyz.com/login?next=<the url user accessed> puis, après une connexion réussie, rediriger l'utilisateur vers l'URL spécifiée dans la valeur de chaîne de requête next.

+0

J'ai normalement utilisé cette approche mais nous pouvons également faire la même chose en utilisant des cookies et des sessions je pense. –

+1

@MAdeelKhalid Oui vous pouvez, fondamentalement l'idée est d'envoyer en quelque sorte l'URL précédente dans le cadre de la demande en raison de la nature sans état de HTTP – Ankur

+0

D'accord mais que se passe-t-il si la session de 2 personnes/utilisateurs expire en même temps? sur les différentes pages, comment la chaîne de requête sera unique pour les deux? –

0

En complément de la réponse @Ankur, j'inclus le code MVC et Angular JS pour obtenir le comportement requis.

AccountController.cs

 [HttpGet] 
     [Route("login")] 
     public ActionResult Login(string returnUrl) 
     { 
      if (Request.IsAuthenticated) 
       return RedirectToAction("Home", "Dashboard"); 

      return View(new AccountLoginModel() { ReturnUrl = returnUrl }); 
     } 

     [HttpGet] 
     public ActionResult Login() 
     { 

      if (Request.IsAuthenticated) 
       return RedirectToAction("Home", "Dashboard"); 

      return View(new AccountLoginModel() { ReturnUrl = string.Empty }); 
     } 

Login.chtml

<div data-ng-controller="AccountLoginViewModel" ng-init="returnUrl = '@Model.ReturnUrl'" class="centered"> 

... HTML code here 

<button type="button" class="btn" ng-click="login()">Login</button> 

</div> 

AccountLoginViewModel.js

$scope.login = function() { 
      viewModelHelper.apiPost('api/account/login', $scope.accountModel, 
       function (result) { 

        if ($scope.returnUrl != '' && $scope.returnUrl.length > 1) { 
         window.location.href = rootPath + $scope.returnUrl.substring(1); 
        } 
        else { 
         window.location.href = rootPath + "dashboard/home"; 
        } 
       }); 
     } 
    }