我正在使用 MVC 3。众所周知,MVC 根据控制器中的操作方法名称设置 URL,但我需要稍作修改。
出于安全目的,我不想在 URL 中显示我的操作方法的名称。因此,如果我在 Home 控制器中有 index 方法,则 URL 将是这样的:www.server/home/index
但我想www.server/home/test
在浏览器中显示。我可以通过使用[ActionName]
属性来做到这一点,但是还有其他方法吗?
我可以为此使用自定义路由处理程序吗?
我正在使用 MVC 3。众所周知,MVC 根据控制器中的操作方法名称设置 URL,但我需要稍作修改。
出于安全目的,我不想在 URL 中显示我的操作方法的名称。因此,如果我在 Home 控制器中有 index 方法,则 URL 将是这样的:www.server/home/index
但我想www.server/home/test
在浏览器中显示。我可以通过使用[ActionName]
属性来做到这一点,但是还有其他方法吗?
我可以为此使用自定义路由处理程序吗?
作为使用ActionName的替代方法,您可以定义自定义路由并将其定向到您想要的任何 Controller 和 Action。例如:
routes.MapRoute("home/test", "home/test/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
将采用类似/home/test
and/home/test/42
的路径并将它们路由到 Home 控制器的 Index 操作。
{id}
如果不需要,您也可以省略该部分。例如:
routes.MapRoute("home/test", "home/test",
new { controller = "Home", action = "Index" });
只会拿/home/test
。
这也是我在保持大写控制器和操作名称的同时实现小写 URL 的方式。我只是硬编码我所有的路线。