Asp.net mvc Net MVC-重定向到路由会产生重定向循环

Asp.net mvc Net MVC-重定向到路由会产生重定向循环,asp.net-mvc,url-redirection,Asp.net Mvc,Url Redirection,这可能是一个简单的问题。。我试图在用户成功通过身份验证后重定向用户,或者将其返回到登录页面。但是成功页面位于另一条路径上,我无法使重定向正常工作 以下是我在Globals.asax中的路线: routes.MapRoute( _ "Default", _ "{controller}/{action}/{id}", _ New With {.controller = "Login", .action = "Index", .id = ""} _ ) routes.M

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

以下是我在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 = ""} _
    )
我有两个控制器:
LoginController.vb
StuffController.vb
Views/Login/Index.aspx文件包含一个包含以下代码的简单表单:

<form method="post" action="/Login/Authenticate">
而StuffController包含以下内容:

Function Index()
    ' show stuff..

    Return View()    ' return /Views/Stuff/Index.aspx
End Function
以下是我迄今为止所尝试的:

  • 函数身份验证()
  • 函数身份验证()为ActionResult()
  • 函数身份验证()为RedirectToRouteResult()

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

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

可能是因为您的填充路径与默认路径的形式完全相同,所以当您调用

Return RedirectToRoute("Stuff");
结果url的形式为:{controller}/{action}/{id},例如再次登录/验证,因为您位于登录控制器的验证操作中

设法

RedirectToAction("Index", "Stuff");
希望有帮助。

试试看

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

正确答案是好的,但是:

  • 如果您想要将控制器/操作名称从Staff/Index更改为其他名称,该怎么办
-然后,您不仅需要更改global.asax中的值,还需要更改使用该技术的所有位置中的值

我的建议是:

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

现在,在本例中,您不需要传递控制器/操作的名称,它是相应的Stuff/Index。这将使您可以轻松管理更改。

是的,我可能错了,但我认为我不需要任何身份验证代码,因为我在这里真正想做的就是“跳转”控制器-如果您不设置身份验证,则从LoginController跳到StuffControlleri。cookie,如果您的操作方法使用[Authorize]属性修饰,那么您将再次重定向回登录url。感谢您对[Authorize]属性的说明。事实上,当我试图让这个工作,我没有写授权代码,所以我没有装饰任何行动方法与[Authorize]-我只是得到'流'的权利开始:o)你是正确的。我删除了“Stuff”路由,使用了RedirectToAction(“[视图]”,“[控制器]”),它可以工作-感谢您的帮助:o)哦,我还需要将身份验证函数的返回类型更改为“ActionResult”:o)太好了,我遇到了同样的问题!
return RedirectToRoute("Stuff", (RouteTable.Routes["Stuff"] as Route).Defaults);