这可能是一些简单的问题..我正在尝试重新定向后的用户,他们已经成功通过身份验证,或者返回他们回到登录网页。但成功的页面是一个不同的路线,和我不可能重定向到工作。

这里是我的路线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

这里就是我已经尝试迄今为止:

  • Function Authenticate()
  • Function Authenticate()作为ActionResult()
  • Function Authenticate()作为RedirectToRouteResult()

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

有帮助吗?

解决方案

它可能是你的东西的路线已经完全相同的形式作为默认的,所以当你呼叫

Return RedirectToRoute("Stuff");

得到的网址具有的形式:{控制器}/{行动}/{id},例如登录/再次进行身份验证,因为你是登录内部控制的认证行动。

尝试

RedirectToAction("Index", "Stuff");

希望这有所帮助。

其他提示

正确的答案是好的,但是:

  • 什么如果你想改变的控制器/操作名称从工作人员/指数是其他什么东西?

-然后你会需要改变价值观,不仅在全球性的。asax,而且在所有地方,你使用的技术。

我的建议:

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

现在,在这种情况下,你不通的名字控制器/操作这东西/索引。这会让你管理的改变很容易。

我看不到你在哪里设定的身份验证cookie或标记的用户作为具有经认证以任何方式。是代码,你没有?

尝试

routes.MapRoute( _    
"Stuff", _
"",_  
New With {.controller = "Stuff", .action = "Index", .id = ""} _    
)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top