2012-08-09 43 views
0

我正在使用MVC 3.因为我们都知道MVC根据控制器中的操作方法名称设置URL,但我需要稍作修改。如何在MVC 3中重写URL?

为了安全起见,我不想在URL中显示我的操作方法的名称。因此,如果我在主控制器中使用索引方法,则URL将如下所示:www.server/home/index但我想在浏览器中显示www.server/home/test。我可以通过使用[ActionName]属性来完成此操作,但是还有其他方法吗?

我可以为此使用自定义路由处理程序吗?

+1

隐藏方法名称的安全目的是什么? – AlexC 2012-08-09 08:25:51

+0

取决于您的需求。这将“测试”指的是?每个控制器有多个动作?你可以使用路由来实现这个目标,但是如果这个名字是针对每个动作(和自定义)的,那么你将不得不为每个动作添加一个对我来说似乎毫无意义的路由(在这种情况下[ActionName]听起来更可行) 。如果“测试”是特定的东西,你可以检索或找出方法,那么也许路线或扩展控制器可能是一个解决方案。让我知道你的目标是什么,我会帮你的:) – Pluc 2012-08-09 11:23:07

+0

现在我只需要做一个动作方法,但通过使用自定义路由处理程序。 @ Pluc – 2012-08-09 11:50:47

回答

0

作为使用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的方式。我只是硬编码我所有的路线。

+0

这将适用于小型网站,但这不会成为维护噩梦? – AlexC 2012-08-09 08:26:54

+0

我会检查并显示给我的老师。如果他批准,那么我会让你知道,或者如果他建议除此之外的任何内容,我也会分享。感谢您的关注。 – 2012-08-09 11:57:11

+0

@AlexC可能但不一定。这取决于您在网站中拥有多少控制器和操作,以及它们多久更换一次。改变路线比重新命名控制器或动作更容易。 – jordanbtucker 2012-08-09 14:44:04