【发布时间】:2016-02-10 14:42:16
【问题描述】:
有一些类似甚至相同的问题,但我想分享我想做的事情,因为我仍然在为此苦苦挣扎。
一般来说,我希望允许用户切换帐户。切换过程也应该从 URL 完成。例如,如果用户键入此 URL www.domain.com/accountname,则应将其重定向到他提供的帐户。我部分完成了这个功能,但我无法完全完成这个功能。
我想满足以下要求:
- 如果用户提供没有帐户名称的 URL,它应该导航到用户必须选择某个帐户的帐户页面。该 URL 的示例是:www.domain.com/controller/action
- 如果用户提供了错误的帐户名或不属于他的帐户名,则应将其重定向到适当的控制器和适当的操作。
- 如果用户提供正确的帐户名称以及他可以访问的位置,则应将他重定向到帐户控制器和 SwithByName 操作。
- 一旦用户提供了帐户名称,它应该始终显示在浏览器的 URL 中。
我试图在 RoutesConfig 中实现这一点,我在其中添加了一条自定义路由。
这是我的默认路线:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "SomeController", action = "SomeAction", id = UrlParameter.Optional }
);
在默认路由之前,我添加了自定义路由:
routes.MapRoute(
name: "AccountRoute",
url: "{accountName}",
defaults: new { controller = "Account", action = "SwitchByName", id = UrlParameter.Optional }
);
我在上面提供的配置可以正常工作,但不能满足第四个要求。
例如,如果我提供 www.domain.com/account,它会将我重定向到该帐户并且它可以工作。但是,如果我从菜单中单击其他内容,它将重定向我并在浏览器中显示 URL,如下所示:www.domain.com/controller/action。这不是我所期望的,我想要这样的东西:www.domain.com/account/controller/action。如果我手动提供以下 URL www.domain.com/account/controller/action 它会抛出异常。
您能给我一些关于 RoutingConfig 的建议吗?
我也尝试过使用过滤器,但在我看来,通过路由来实现这一点是更正确的方法。
谢谢
【问题讨论】:
-
什么版本的 MVC?
标签: c# asp.net-mvc