使用重写的URL与直接控制器调用

时间:2016-06-02 15:53:10

标签: asp.net-mvc url-rewriting routes asp.net-mvc-routing url-routing

是否有一种简单的全能方式来确保只有重写的URL可以调用控制器?

例如,如果我们有一个URL www.somesite.com/about指向行动"关于"在控制器"共享",是否可以确保任何对www.somesite.com/shared/about的请求最终都在重写的URL,在这种情况下www.somesite.com/about?

换句话说,如果没有重定向到重写的URL,用户就不能只键入/ controller / action。

但是,我们不想主动检查和重定向,但希望有一些MVC的内置功能。我在这些方面找到的唯一建议是ChildActionOnly和HttpPost属性,但它们似乎不是答案(普通链接不起作用)。

如上所述,我们正在寻找一些简单的,或多或少内置的东西 - 如果它不存在那么就是它......

1 个答案:

答案 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,可以在任何自定义MvcRouteHandlerRouteBase implementation中使用Route作为IgnoreRoute的替代品动态忽略规则而非此。

  

注意:在路由表中要忽略的路由之前注册relative_resize非常重要。