Asp.net mvc Net MVC-重定向到路由会产生重定向循环
这可能是一个简单的问题。。我试图在用户成功通过身份验证后重定向用户,或者将其返回到登录页面。但是成功页面位于另一条路径上,我无法使重定向正常工作 以下是我在Globals.asax中的路线: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
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);