在ASP.NET MVC中使用窗体身份验证当尝试重新登录站点时,它会在查询字符串中放入一个ReturnUrl参数。我的登录操作方法接受"returnUrl“字符串。然而,returnUrl字符串似乎总是空的,即使它明确地在查询字符串中。有没有想过为什么会出现这种情况或可能的修复方法?
发布于 2009-05-06 03:30:36
也许您没有将ReturnURL
参数包含到登录表单的操作属性中,从而在没有该参数的情况下发送到一个网址?
发布于 2010-04-04 03:45:51
我可以想到两种方法来处理登录和注销场景。戴夫·比尔概述了一种方法,上图。还有另一种方法,在许多情况下都有效。我在编写NerdDinner教程时用到了它。本教程为我们提供了一个注销功能,可以让您注销并带您回家。我不想那样做。我想要返回到我注销之前所在的页面。因此我修改了我的帐户控制器注销操作,如下所示
public ActionResult LogOff()
{
FormsService.SignOut();
return Redirect(Request.UrlReferrer.ToString());
}
如果您想要覆盖此行为,您可以使用更多的方法传入returnUrl并对其进行测试。但我不需要这样。这样就达到了预期的效果。登录的工作方式与此类似。也许有一些方法可以使用MVC框架为我做这件事,但在我学会它们之前,这是非常简单和可靠的。
发布于 2009-05-06 08:58:49
尝试以下操作:
public static MvcForm BeginForm(this HtmlHelper htmlHelper, string id)
{
string formAction = htmlHelper.ViewContext.HttpContext.Request.RawUrl;
TagBuilder tagBuilder = new TagBuilder("form");
tagBuilder.MergeAttribute("id", id);
tagBuilder.MergeAttribute("action", formAction);
tagBuilder.MergeAttribute("method", HtmlHelper.GetFormMethodString(FormMethod.Post), true);
HttpResponseBase httpResponse = htmlHelper.ViewContext.HttpContext.Response;
httpResponse.Write(tagBuilder.ToString(TagRenderMode.StartTag));
return new MvcForm(htmlHelper.ViewContext.HttpContext.Response);
}
首先,确保您已在web.config中设置了登录url,然后,确保您的登录表单不包含任何类似操作的内容,例如:
查看:
如果指定action,则返回url将始终为null:
控制器:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SignIn(string userName, string password, bool? rememberMe, string returnUrl)
{
}
https://stackoverflow.com/questions/827905
复制相似问题