正如标题所说,来自我的登录操作的returnUrl参数始终为空,我遵循了默认的互联网应用程序示例,但我无法使其工作(我是一个相对较新的MVC)
视图
@using MundialDeFutbol.Models
@using System.Web.Optimization
@model LoginModel
@{
ViewBag.Title = "Login";
}
<h3 class="text-info">Login</h3>
<div class="separadorHorizontal"></div>
@using (Html.BeginForm("Login", "Usuarios", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post,
new { @class = "form-horizontal", @style = "margin-top: 20px;" }))
{
@Html.AntiForgeryToken()
<div id="loginErrors" class="form-group">
<div class="col-sm-offset-2 col-sm-10 ">
<strong>
@Html.ValidationSummary(true, null, new { @class = "text-danger", @id = "margin-top: 10px;" })
</strong>
</div>
</div>
<div class="form-group">
<label for="Nick" class="col-sm-2 control-label">@Html.LabelFor(model => model.Nick)</label>
<div class="col-sm-10">
@Html.TextBoxFor(model => model.Nick, new { @class = "form-control", @placeholder = "Nombre de usuario" })
<strong>
@Html.ValidationMessageFor(model => model.Nick, null, new { @class = "text-danger", @style = "display: block; margin-top: 10px;" })
</strong>
</div>
</div>
<div class="form-group">
<label for="Contraseña" class="col-sm-2 control-label">@Html.LabelFor(model => model.Contraseña)</label>
<div class="col-sm-10">
@Html.TextBoxFor(model => model.Contraseña, new { @class = "form-control", @placeholder = "Escribe contraseña", @type = "password" })
<strong>
@Html.ValidationMessageFor(model => model.Contraseña, null, new { @class = "text-danger", @style = "display: block; margin-top: 10px;" })
</strong>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Entrar</button>
</div>
</div>
}
@section scripts {
@Scripts.Render("~/bundles/jqueryval")
}控制器
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
[HttpPost]
[AllowAnonymous] // --> Preguntar
[ValidateAntiForgeryToken] // --> Preguntar
public ActionResult Login(LoginModel usuario, string returnUrl)
{
if (ModelState.IsValid)
{
if (IsValid(usuario.Nick,usuario.Contraseña))
{
FormsAuthentication.SetAuthCookie(usuario.Nick, false);
return Redirect(returnUrl);
}
else
{
ModelState.AddModelError("", "Usuario o contraseña incorrectos");
}
}
else
{
var errors = ModelState.Keys.SelectMany(key => ModelState[key].Errors);
}
return View();
}最后,我想问一下"AllowAnonymous“和"ValidateAntiForgeryToken”装饰器是做什么的。
提前感谢!
发布于 2016-02-15 04:42:43
如果使用自定义身份验证,则需要在方法OnAuthorization中添加: ReturnUrl = filterContext.HttpContext.Request.RawUrl
示例:
public override void OnAuthorization(AuthorizationContext filterContext)
{
//Some logic here...
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(
new { controller = "Account",
action = "Login",
ReturnUrl = filterContext.HttpContext.Request.RawUrl }));
}发布于 2014-05-27 13:01:59
我猜你是在设置两件事,但用来做一件事:在你的.cshtml页面中,你设置如下:
@using (Html.BeginForm("Login", "Usuarios", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post,
new { @class = "form-horizontal", @style = "margin-top: 20px;" }))但在您的post登录操作中,您可以将其命名为"returnUrl“,如下所示:
public ActionResult Login(LoginModel usuario, string returnUrl)请检查后重试,参数区分大小写。
发布于 2014-05-27 13:10:01
在参数中,您有:
new { ReturnUrl = ViewBag.ReturnUrl }
^
|
|但在操作中参数是:
public ActionResult Login(LoginModel usuario, string returnUrl)
^
|
|https://stackoverflow.com/questions/23881314
复制相似问题