ASP.Net MVC - 重定向到路由提供Redirect Loop

时间:2008-10-26 12:48:51

标签: asp.net-mvc url-redirection

这可能是其中一个简单的问题。我正在尝试在用户成功通过身份验证后重定向,或将其返回到登录页面。但是Success页面位于不同的路径上,我无法使重定向工作..

以下是我在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.vbViews/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

这是我到目前为止所尝试的内容:

  • 功能验证()
  • Function Authenticate()As ActionResult()
  • 功能Authenticate()As RedirectToRouteResult()

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

4 个答案:

答案 0 :(得分:11)

正确答案很好,但是:

  • 如果您想将控制器/操作名称从Staff / Index更改为其他内容,该怎么办?

- 然后您不仅需要在global.asax中更改值,还需要在使用该技术的所有位置更改值。

我的建议:

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

现在,在这种情况下,您不会相应地传递控制器/动作的名称,即Stuff / Index。这样您就可以轻松管理更改。

答案 1 :(得分:7)

可能是你的Stuff路线与默认路线的形式完全相同,所以当你拨打

Return RedirectToRoute("Stuff");

生成的网址格式为:{controller} / {action} / {id},例如:再次登录/验证,因为您在Login-controller的Authenticate操作中。

尝试

RedirectToAction("Index", "Stuff");

希望有所帮助。

答案 2 :(得分:0)

我无法确定您在何处设置身份验证Cookie或将用户标记为已经过任何身份验证。那是你省略的代码吗?

答案 3 :(得分:0)

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