Returnurl ist in Ordnung, wenn Login-Methode direkt aufgerufen wird. Wenn es von einer anderen Methode aufgerufen wird, die eine Authentifizierung erfordert, wird der Rückkehrpfad zur aktuellen URL HINZUGEFÜGT.ASPNET MVC ReturnUrl unerwartetes Verhalten, wenn eine Zwischenmethode Authentifizierung erfordert
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string ReturnUrl)
{
ViewBag.ReturnUrl = ReturnUrl;
return View();
}
Login.cshtml:
@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{(... omitted for brevity)
Anmeldung Ansicht ist eine modal. So enthält es folgende Skript Benutzer die Handhabung des modalen ohne sich einzuloggen, endet:
$("#modalLoginDiv").on("hidden.bs.modal", function() {
window.location = '@ViewBag.ReturnUrl';
});
Aufruf der Methode direkt (home navbar) ab Seite
der ReturnUrl Wert „/ Geschenke/Details/1589 ", und Schließen der Login-Modal-Returns Seite , wie erwartet
Jetzt, wenn ein Anruf Verfahren, die eine Authentifizierung von folgendem Link auf derselben Seite anfordern http://localhost:51003/Gifts/Details/1589:
http://localhost:51003/messagemanager/ReportThis?productId=1589
[HttpGet]
[Authorize(Roles = "Admin, Users")]
public ActionResult ReportThis(int productId)
{
ViewBag.productId = productId;
return View();
}
als Report Methode Authentifizierung erfordert, wird Login-Methode gebrannt und wieder sieht ReturnUrl Wert in Login-Methode nur als erwartet:
/Messagemanager/Report productId = 1589
Wenn ich die Login-modal zu schließen, ohne in etwas Protokollierung Unvorhergesehenes passiert: während ReturnUrl Wert auf Login-Methode Parameter übergeben hält suchen fein, Browser-URL ist jetzt
http://localhost:51003/Account/Login?ReturnUrl=%2Fmessagemanager%2FReportThis%3FproductId%3D1589
, dass das ist returnUrl wurde der Konto-/Anmelde-URL hinzugefügt. Als Sicherheitsergebnis login modal lädt offensichtlich endlos weiter.
Ich kann nicht herausfinden, was dieses unerwartete Verhalten verursacht und wie es zu beheben, da ReturnUrl Wert immer gut aussieht, aber im ersten Fall ersetzt es korrekt vorherige URL während es durch eine Zwischenmethode aufgerufen wird, die dem Konto/Login hinzugefügt wird URL
Haben Sie das Problem – hasan