使用 RedirectToAction 时如何跳过控制器名称?

Posted

技术标签:

【中文标题】使用 RedirectToAction 时如何跳过控制器名称?【英文标题】:How to skip controller name while using RedirectToAction? 【发布时间】:2011-04-29 16:11:37 【问题描述】:

我有 accountController 类,它有登录和主页视图。

[处理错误] 公共类 accountController : 控制器 [HttpPost] public ActionResult login(LoginModal 模型,字符串 returnUrl) //验证 返回 RedirectToAction("home"); 公共 ActionResult home() 返回视图(); ------------------------------ ----------------------------------------- Global.asax 有 Route 条目.. 所以我的网址是 http://lmenaria.com/login http://lmenaria.com/home routes.MapRoute(null, "home", new controller = "account", action = "home" ); routes.MapRoute(null, "login", new controller = "account", action = "login" );

当我在浏览器上尝试这两个 URL 时,它们工作正常。但是当登录成功时,它会转到http://lmenaria.com/account/home 那么如何从此网址中删除“帐户”。当我使用 return RedirectToAction("home");并得到 404 错误。

所以请告诉我如何解决这个问题。我不需要 url 中的控制器名称。

谢谢 乳糜泻

【问题讨论】:

【参考方案1】:

routes.MapRoute("home", "home", new controller = "account", action = "home" );

我尝试使用 Above MapRoute 并使用 RedirectToRoute 而不是 RedirectTOAction 及其工作。

谢谢。

【讨论】:

【参考方案2】:

如果您想将控制器默认为“帐户”,而不在您的 URL 中显示它,那么您可以执行类似的操作

routes.MapRoute(null, "action", new controller = "account" );

如果需要,您也可以使用默认值进行操作

routes.MapRoute(null, "action", new controller = "account", action = "home" );


我正在编辑我的答案,让你知道你不需要像你正在做的那样明确定义每条路线。 MVC 路由匹配模式。所以,而不是

routes.MapRoute(null, "home", new controller = "account", action = "home" ); routes.MapRoute(null, "login", new controller = "account", action = "login" );

只使用

routes.MapRoute(null, "action", new controller = "account" );

如果您定义多个模式,请注意路由顺序,因为顺序很重要。 MVC 将使用与您的 URL 匹配的第一个模式。

【讨论】:

【参考方案3】:

我认为真正的问题是您要么没有创建或删除家庭控制器。

根据您的描述,您确实应该为 Home 控制器的 Index 操作调用 RedirectToAction。

【讨论】:

【参考方案4】:

您的登录操作中有 [HttpPost]。这应该是问题所在。我只是在没有 [HttpPost] 属性的情况下运行您的代码。这是工作。当您键入http://lmenaria.com/login 时,您的“登录”操作将不会被触发,因为该属性。所以,一定有其他的路由来做路由。

【讨论】:

以上是关于使用 RedirectToAction 时如何跳过控制器名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RedirectToAction 方法添加查询字符串值?

如何在 Asp.NET MVC 中使用 RedirectToAction() 传递多个对象?

有没有办法在使用 Asp.Net MVC ActionLink、RedirectToAction 等时包含片段标识符?

redirectToAction 正在重置数组

asp.net mvc 2 - 当 RedirectToAction 使用 JSON 数据时失去授权

如何在 ASP.NET MVC 6 中继续使用 ModelState 和 RedirectToAction?