以下是LogOn后期操作方法的定义
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
// more inside
}
我有一个基本问题。框架是否提供string returnUrl
?或者我确实有这个责任?
感谢您的帮助。
答案 0 :(得分:3)
这取决于谁调用此方法以及是否在POST请求中提供了此参数。例如,如果用户尝试访问使用[Autorize]
属性修饰的控制器操作并且未经过身份验证,则框架将自动重定向到LogOn
操作(呈现表单的操作,而不是具有[HttpPost]
)并提供returnUrl
参数。然后,您可以在登录表单中使用隐藏字段来保留其值,以便在用户输入其凭据并将表单提交到LogOn
操作时,如果成功登录,则会将其重定向到最初请求的页面
答案 1 :(得分:1)
好吧,就像我有时一样,我回答我自己的问题,以便在让其他人回答之后添加更多关于我如何解决问题的信息(在这种情况下,Darin Dimitrov)。
简单地说,@ Darin Dimitrov向我解释说,如果重定向到returnUrl
操作方法不是强制用户提供凭据(当方法尝试时),我需要提供LogOn
访问权限使用[Authorize]
属性进行修饰。我需要使用new { returnUrl = RouteData.Values["action"] }
来提供该值。
以下是一些问题:
智能感知器无法识别``RouteData.Values [“action”],我需要使用Page.RouteData.Values["action"]
我一直收到以下错误:“无法找到资源”,网址显示为http://example.com/Account/Whatever_action_is_in_the_returnUrl
。这是有道理的,因为我只提供了动作字符串。
我做了这个
new
{
returnUrl = Page.RouteData.Values["controller"] + "/" + Page.RouteData.Values["action"]
}
但是我收到了一些错误:“无法找到资源”,网址显示http://example.com/Account/myController/myAction
。该帐户仍在Url中,导致同样的错误。
最后,我在开头添加了另一个斜杠,然后才有效。
new
{
returnUrl = "/" + Page.RouteData.Values["controller"] + "/" + Page.RouteData.Values["action"]
}
了解重定向业务的许多方面看起来很重要。到目前为止,我主要使用RedirectToAction()
。
谢谢@Darin Dimitrov。
答案 2 :(得分:0)
尝试将以下内容放在提供LogOn的视图中
@using (Html.BeginForm("index", "signin", new { ReturnUrl = Request.QueryString["ReturnUrl"] }))