0

我有以下登录操作 [HttpPost]

     public ActionResult LogOn(LogOnModel user, string returnUrl)
        {
  if (!String.IsNullOrEmpty(returnUrl))
                                {
                    return Redirect(returnUrl);
                }
                else
                {
                    return RedirectToAction("Index", "Home");
                }
}

其中我的 returnUrl 为空。任何人都可以告诉我。为什么我的返回 URL 为空

4

3 回答 3

2

我为此写了一个非常修复的方法。基本上添加一个路由值需要添加到 Html.BeginForm 如下。

Html.BeginForm("LogOn", 
    "Account", 
    new { returnUrl = Request.QueryString["ReturnUrl"] })

有关更多详细信息,请参阅http://blog.nicholasrogoff.com/2013/12/10/net-mvc-3-logon-does-not-redirect-out-the-boxquick-fix/

于 2013-12-11T08:24:34.323 回答
1

这取决于您如何调用控制器操作方法。

  1. 如果您有如下 URL http://www.somedomain.com/LogOn/LogOn?returnUrl=user/userList

    在此调用中,您returnUrlActionMethod(的参数LogOn 将被替换为querystringparameter returnUrl

  2. 如果您使用form authentication,则有一个[Authorize]验证身份验证的属性。如果用户未通过身份验证,则它将重定向到其中包含请求的页面 url 的页面LogInquerystring parameter returnUrl

此时,您还将returnUrl在控制器的 action 方法参数中获取 value 参数,returnUrl其中 value 将具有requested page Url

希望这可以帮助!

于 2012-11-07T07:13:15.977 回答
0

这取决于谁在调用此方法以及是否在 POST 请求中提供了此参数。

例如,如果用户试图访问一个用该[Autorize]属性修饰的控制器动作并且他没有通过身份验证,那么框架将自动重定向到该LogOn动作(呈现表单的动作,而不是带有的动作[HttpPost])并提供returnUrl参数。

然后,您可以在登录表单中有一个隐藏字段来保留其值,以便当用户输入他的凭据并将表单提交给LogOn操作时,如果登录成功,他会被重定向到最初请求的页面。

于 2012-11-07T06:50:05.160 回答