首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >returnUrl是否始终为空?

returnUrl是否始终为空?
EN

Stack Overflow用户
提问于 2014-05-27 12:55:55
回答 3查看 1.8K关注 0票数 0

正如标题所说,来自我的登录操作的returnUrl参数始终为空,我遵循了默认的互联网应用程序示例,但我无法使其工作(我是一个相对较新的MVC)

视图

代码语言:javascript
复制
@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")
}

控制器

代码语言:javascript
复制
    [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”装饰器是做什么的。

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2016-02-15 04:42:43

如果使用自定义身份验证,则需要在方法OnAuthorization中添加: ReturnUrl = filterContext.HttpContext.Request.RawUrl

示例:

代码语言:javascript
复制
 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 }));            
 }
票数 1
EN

Stack Overflow用户

发布于 2014-05-27 13:01:59

我猜你是在设置两件事,但用来做一件事:在你的.cshtml页面中,你设置如下:

代码语言:javascript
复制
@using (Html.BeginForm("Login", "Usuarios", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post,
new { @class = "form-horizontal", @style = "margin-top: 20px;" }))

但在您的post登录操作中,您可以将其命名为"returnUrl“,如下所示:

代码语言:javascript
复制
public ActionResult Login(LoginModel usuario, string returnUrl)

请检查后重试,参数区分大小写。

票数 0
EN

Stack Overflow用户

发布于 2014-05-27 13:10:01

在参数中,您有:

代码语言:javascript
复制
new { ReturnUrl = ViewBag.ReturnUrl }
      ^
      |
      |

但在操作中参数是:

代码语言:javascript
复制
public ActionResult Login(LoginModel usuario, string returnUrl)
                                                     ^
                                                     |
                                                     |
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23881314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档