2010-01-29 60 views
0

登录后为什么不重定向我使用ASP.NET MVC,我登录动作我做:无法解释使用RedirectFromLogin

[AcceptVerbs("POST")] 
public ActionResult Login(FormCollection form) 
{ 
    User validatedUser = // tests username/pwd here. 

    FormsAuthentication.RedirectFromLoginPage(
     validatedUser.ID.ToString(), rememberMe); 

    if(String.IsNullOrEmpty(Request["ReturnUrl"])) 
     string redirectUrl = Request["ReturnUrl"]; 

    if (!String.IsNullOrEmpty(Request.QueryString["ReturnUrl"])) 
     string redirectUrl = Request["ReturnUrl"]; 
} 

我的网址是这样的,当我在登录页面:

http://localhost:56112/user/login?ReturnUrl=/admin/settings 

这里有什么看起来不对?

我的web.config:

<authentication mode="Forms"> 
    <forms loginUrl="/user/login" 
     protection="All" 
     timeout="30" 
     name="SomeCookie" 
     requireSSL="false" 
     slidingExpiration="true" 
     defaultUrl="default.aspx" /> 

回答

6

我建议你针对一个MVC应用程序中使用RedirectFromLoginPage方法。使用标准的ASP.NET MVC技术来执行重定向会更好。你可以使用SetAuthCookie方法:

public ActionResult Login(FormCollection form) 
{ 
    // ... 
    FormsAuthentication.SetAuthCookie(validatedUser.ID.ToString(), rememberMe); 
    // ... 
    return Redirect(FormsAuthentication.DefaultUrl); // will read default url from web.config 
} 
+0

你为什么建议反对它? (curiuos) – Blankman 2010-01-29 14:52:23

+0

因为在ASP.NET MVC应用程序中执行重定向的推荐方式是从操作返回适当的ActionResult。 'RedirectFromLoginPage'几乎不可能进行单元测试。 – 2010-01-29 15:12:39

+0

上述解决方案的工作原理,但为什么甚至调用FormsAuthentication.DefaultUrl。为什么不直接从代码重定向到控制器和操作。 “RedirectToAction”是一个更好的解决方案。 – 2013-07-22 13:52:52