它不会返回视图.事实上,Action在调用之后仍然需要返回一个视图……那么发生了什么?
解决方法
如果要使用FormsAuthentication系统,则需要切换到此行(隐式使用returnUrl参数).
return Redirect(FormsAuthentication.GetRedirectUrl(model.UserName,true));
您将获得FormsAuthentication.RedirectFromLoginPage将使用的URL,但您将使用RedirectResult明确地从操作方法中保释.
注意
如果你走这条路线,你会想要在表单auth web.config行中放置一个defaultUrl参数,以防有人直接进入你的登录页面(或者他们传入一个不通过FormsAuthentication安全限制的redirectUrl).如果不覆盖默认值,错误的URL将被重定向到〜/ default.aspx.在大多数MVC应用程序中,这可能是404.
<forms loginUrl="~/Account/logon" defaultUrl="~/" timeout="2880">
替代
如果您启动一个新的MVC 3示例“Internet应用程序”,您将找到一个logon操作方法,该方法处理类似于FormsAuthentication.RedirectFromLoginPage内部执行的returnUrl.
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) { return Redirect(returnUrl); } else { return RedirectToAction("Index","Home"); }