是否有一种简单的全能方式来确保只有重写的URL可以调用控制器?
例如,如果我们有一个URL www.somesite.com/about指向行动"关于"在控制器"共享",是否可以确保任何对www.somesite.com/shared/about的请求最终都在重写的URL,在这种情况下www.somesite.com/about?
换句话说,如果没有重定向到重写的URL,用户就不能只键入/ controller / action。
但是,我们不想主动检查和重定向,但希望有一些MVC的内置功能。我在这些方面找到的唯一建议是ChildActionOnly和HttpPost属性,但它们似乎不是答案(普通链接不起作用)。
如上所述,我们正在寻找一些简单的,或多或少内置的东西 - 如果它不存在那么就是它......
答案 0 :(得分:1)
阻止路由的内置方法是使用IgnoreRoute
。它使路由短路并且总是使路径抛出404找不到。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Ignore /Home/About
routes.IgnoreRoute("Home/About");
// Register /About
routes.MapRoute(
name: "About",
url: "About",
defaults: new { controller = "Home", action = "About" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
请注意,在封面下,它使用StopRoutingHandler
,可以在任何自定义MvcRouteHandler
或RouteBase
implementation中使用Route
作为IgnoreRoute
的替代品动态忽略规则而非此。
注意:在路由表中要忽略的路由之前注册
relative_resize
非常重要。