我正在使用MVC 3.因为我们都知道MVC根据控制器中的操作方法名称设置URL,但我需要稍作修改。如何在MVC 3中重写URL?
为了安全起见,我不想在URL中显示我的操作方法的名称。因此,如果我在主控制器中使用索引方法,则URL将如下所示:www.server/home/index
但我想在浏览器中显示www.server/home/test
。我可以通过使用[ActionName]
属性来完成此操作,但是还有其他方法吗?
我可以为此使用自定义路由处理程序吗?
我正在使用MVC 3.因为我们都知道MVC根据控制器中的操作方法名称设置URL,但我需要稍作修改。如何在MVC 3中重写URL?
为了安全起见,我不想在URL中显示我的操作方法的名称。因此,如果我在主控制器中使用索引方法,则URL将如下所示:www.server/home/index
但我想在浏览器中显示www.server/home/test
。我可以通过使用[ActionName]
属性来完成此操作,但是还有其他方法吗?
我可以为此使用自定义路由处理程序吗?
作为使用ActionName的替代方案,您可以定义自定义路线并将其引导至您想要的任何控制器和动作。例如:
routes.MapRoute("home/test", "home/test/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
将采取类似/home/test
和/home/test/42
和它们路由到主控制器的索引操作路径。
如果您不需要它,您也可以忽略{id}
部分。例如:
routes.MapRoute("home/test", "home/test",
new { controller = "Home", action = "Index" });
将只需要/home/test
。
这也是我在保持大写字母控制器和动作名称的同时实现小写URL的方式。我只是硬编码我所有的路线。
这将适用于小型网站,但这不会成为维护噩梦? – AlexC 2012-08-09 08:26:54
我会检查并显示给我的老师。如果他批准,那么我会让你知道,或者如果他建议除此之外的任何内容,我也会分享。感谢您的关注。 – 2012-08-09 11:57:11
@AlexC可能但不一定。这取决于您在网站中拥有多少控制器和操作,以及它们多久更换一次。改变路线比重新命名控制器或动作更容易。 – jordanbtucker 2012-08-09 14:44:04
隐藏方法名称的安全目的是什么? – AlexC 2012-08-09 08:25:51
取决于您的需求。这将“测试”指的是?每个控制器有多个动作?你可以使用路由来实现这个目标,但是如果这个名字是针对每个动作(和自定义)的,那么你将不得不为每个动作添加一个对我来说似乎毫无意义的路由(在这种情况下[ActionName]听起来更可行) 。如果“测试”是特定的东西,你可以检索或找出方法,那么也许路线或扩展控制器可能是一个解决方案。让我知道你的目标是什么,我会帮你的:) – Pluc 2012-08-09 11:23:07
现在我只需要做一个动作方法,但通过使用自定义路由处理程序。 @ Pluc – 2012-08-09 11:50:47