C# 返回URL总是空的吗?

C# 返回URL总是空的吗?,c#,asp.net-mvc,C#,Asp.net Mvc,正如标题所说,我的登录操作中的returnUrl参数始终为空,我遵循了默认的Internet应用程序示例,但我无法使其正常工作(我对MVC比较陌生) 景色 @using MundialDeFutbol.Models @using System.Web.Optimization @model LoginModel @{ ViewBag.Title = "Login"; } <h3 class="text-info">Login</h3> <div clas

正如标题所说,我的登录操作中的returnUrl参数始终为空,我遵循了默认的Internet应用程序示例,但我无法使其正常工作(我对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]”和“[ValidateAntiForgeryToken]”装饰符的作用是什么


提前谢谢

我猜您设置了两件事,但将其作为一件事使用:在您下面设置的.cshtml页面中:

@using (Html.BeginForm("Login", "Usuarios", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post,
new { @class = "form-horizontal", @style = "margin-top: 20px;" }))
但在您的登录后操作中,您将其名称命名为“returnUrl”,如下所示:

public ActionResult Login(LoginModel usuario, string returnUrl)

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

在参数中,您有:

new { ReturnUrl = ViewBag.ReturnUrl }
      ^
      |
      |
但实际参数为:

public ActionResult Login(LoginModel usuario, string returnUrl)
                                                     ^
                                                     |
                                                     |

如果您使用的是自定义身份验证,则需要添加身份验证方法: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 }));            
 }

如上所述:[AllowAnonymous]是一个属性,可用于修饰动作或控制器,如果是这样,匿名用户可以访问您的网页;如果没有,则需要登录以采取进一步行动;另一个[ValidateAntiForgeryToken]用于防止跨站点请求伪造;你好,谢谢你的回复。但是没有,它根本没有改变任何东西,GET“version”登录甚至没有参数“returnUrl”,它总是空的。它应该保存单击登录链接的url。这很奇怪,因为我做了与默认示例中完全相同的事情:|这解决了您的问题吗?我的意思是统一web页面中的参数名以及操作标记“RetrunUrl”和“returnUrl”中的参数名?就像上面提到的Ehsan Sajjad一样。现在所有参数都有相同的名称(ReturnUrl),甚至是表单,并且仍然返回
null
确保在发布登录时为参数ReturnUrl指定一个值。在发布表单之前,请在url中进行检查。如果一切都好的话,我真的很抱歉我不能进一步帮助你。糟糕的一天o(
 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 }));            
 }