当前位置:  开发笔记 > 后端 > 正文

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

如何解决《ASP.NetMVC-重定向到路由提供RedirectLoop》经验,为你挑选了2个好方法。

这可能是其中一个简单的问题.我试图在用户成功通过身份验证后重定向,或将其返回到登录页面.但是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.vb.该Views/Login/Index.aspx文件包含一个带有代码的简单表单:

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()

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



1> 小智..:

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

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

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

我的建议:

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

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



2> liggett78..:

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

Return RedirectToRoute("Stuff");

生成的url具有以下形式:{controller}/{action}/{id},例如,再次登录/验证,因为您在Login-controller的Authenticate操作中.

尝试

RedirectToAction("Index", "Stuff");

希望有所帮助.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有