5

这可能是那些简单的问题之一。我试图在用户成功通过身份验证后重定向用户,或者将他们返回到登录页面。但是成功页面在不同的路线上,我无法让重定向工作..

这是我在 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

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

  • 功能验证()
  • 函数 Authenticate() As ActionResult()
  • 函数 Authenticate() As RedirectToRouteResult()

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

4

4 回答 4

11

正确答案很好,但是:

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

- 那么您不仅需要更改 global.asax 中的值,还需要更改使用该技术的所有地方的值。

我的建议:

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

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

于 2010-11-29T09:51:37.253 回答
8

会不会是您的 Stuff 路由与默认路由的格式完全相同,所以当您调用

Return RedirectToRoute("Stuff");

结果 url 的格式为:{controller}/{action}/{id},例如再次登录/验证,因为您在登录控制器的验证操作中。

尝试

RedirectToAction("Index", "Stuff");

希望有帮助。

于 2008-10-26T13:06:03.827 回答
0

我看不到您在哪里设置身份验证 cookie 或将用户标记为已通过任何方式进行身份验证。是在您省略的代码中吗?

于 2008-10-26T12:54:46.533 回答
0

尝试

routes.MapRoute( _    
"Stuff", _
"",_  
New With {.controller = "Stuff", .action = "Index", .id = ""} _    
)
于 2008-12-26T10:27:17.213 回答