2008-10-26 101 views
5

这可能是这些简单的问题之一..我试图重定向用户后,他们已经成功验证,或返回到登录页面。但成功页面是在不同的路线,我不能得到重定向工作..ASP.Net MVC - 重定向到路由给重定向循环

这里是我的航线Globals.asax:

routes.MapRoute(_ 
    "Default", _ 
    "{controller}/{action}/{id}", _ 
    New With {.controller = "Login", .action = "Index", .id = ""} _ 
    ) 
routes.MapRoute(_ 
    "Stuff", _ 
    "{controller}/{action}/{id}", _ 
    New With {.controller = "Stuff", .action = "Index", .id = ""} _ 
    ) 

我有2个控制器:LoginController.vbStuffController.vb。该Views/Login/Index.aspx文件包含一个简单的形式与代码:

<form method="post" action="/Login/Authenticate"> 

LoginController包含以下代码:

Function Authenticate() As RedirectToRouteResult 
    ' authentication code commented out ;o) 

    Return RedirectToRoute("Stuff") 
End Function 

而且StuffController包含以下内容:

Function Index() 
    ' show stuff.. 

    Return View() ' return /Views/Stuff/Index.aspx 
End Function 

这里是我的”已经尝试到目前为止:

  • 功能进行身份验证()
  • 功能进行身份验证()作为的ActionResult()
  • 功能进行身份验证()作为RedirectToRouteResult()

所有这些导致浏览器重定向循环超时。我错过了什么?!

+0

伟大的问题,我遇到了同样的问题! – MrBoJangles 2011-12-19 17:08:49

回答

7

难道说你的东西路由具有同样的形式作为默认的,所以当你打电话

Return RedirectToRoute("Stuff"); 

生成的URL的形式:{控制器}/{行动}/{ID} ,例如因为您处于登录控制器的身份验证操作中,所以请再次登录/验证身份。

尝试

RedirectToAction("Index", "Stuff"); 

希望有所帮助。

0

我无法看到您在哪里设置身份验证Cookie或将用户标记为以任何方式进行了身份验证。那是在你遗漏的代码中?

+0

是的,我可能是错的,但我不认为我需要任何认证代码,因为我真的想在这里做'跳'控制器 - 从LoginController到StuffController – Andrew 2008-10-26 17:06:22

+0

如果您没有设置AUTH。 cookie,只要您的操作方法使用[Authorize]属性进行修饰,那么您将被重新导向到您的登录网址。 – liggett78 2008-10-26 18:32:46

+0

感谢有关[授权]属性的说明。事实是,当我试图让这个工作,我没有写授权码,所以我没有用[授权]装饰任何行动方法 - 我刚刚得到的'流'权开始:o) – Andrew 2008-12-17 10:25:25

0

尝试

routes.MapRoute(_  
"Stuff", _ 
"",_ 
New With {.controller = "Stuff", .action = "Index", .id = ""} _  
) 
8

正确答案是好的,但:

  • 什么,如果你想给控制器/动作名称从职员/指数变更为别的东西吗?

- 然后您将需要更改不仅在global.asax中的值,而且还需要在您使用该技术的所有地方更改值。

我的建议:

return RedirectToRoute("Stuff", (RouteTable.Routes["Stuff"] as Route).Defaults); 

现在,在这种情况下,你不通过控制器/动作是东西/索引相应的名称。这将让您轻松管理更改。