returnurl正常。当其他需要身份验证的方法调用它时,returnurl路径将被添加到当前URL。
// 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)
登录视图是一种模式。因此它包含以下脚本处理用户关闭模式而不使用loggin:
$("#modalLoginDiv").on("hidden.bs.modal", function () {
window.location = '@ViewBag.ReturnUrl';
});
从页面直接调用方法(主页导航栏)
ReturnUrl值为" / Gifts / Details / 1589" ,关闭登录模式返回页面http://localhost:51003/Gifts/Details/1589,如预期的那样
现在,当从同一页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();
}
作为ReportThis方法需要身份验证,将触发Login方法,同样,Login方法中的ReturnUrl值看起来与预期一样:
/给messageManager / ReportThis?的productId = 1589
如果我关闭登录模式而没有登录意外发生的事情:当传递给Login方法参数的ReturnUrl值保持正常时,浏览器URL现在是
http://localhost:51003/Account/Login?ReturnUrl=%2Fmessagemanager%2FReportThis%3FproductId%3D1589
即returnUrl已添加到帐户/登录URL。 作为抵押品结果,登录模式显然会无休止地加载。
我无法弄清楚导致这种意外行为的原因以及如何修复它,因为ReturnUrl值总是看起来很好但在第一种情况下它正确地替换了以前的URL,而中间方法调用它时它被添加到帐户/登录URL
答案 0 :(得分:0)
您可以尝试使用ReturnUrl = Request.QueryString["ReturnUrl"]
代替ViewBag.ReturnUrl
Html.BeginForm("Login", "Account", new {ReturnUrl = Request.QueryString["ReturnUrl"] })
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginInputModel model, string ReturnUrl) {
...
}