如何在我的自定义MvcRouteHandler中模拟IgnoreRoute

时间:2011-02-14 16:35:16

标签: asp.net asp.net-mvc asp.net-mvc-2 asp.net-mvc-3 asp.net-mvc-routing

在我的ASP.NET MVC3应用程序中,我尝试模拟“routes.IgnoreRoute(”...“)” 我创建了CustomMvcRouteHandler:

public class CustomMvcRouteHandler: MvcRouteHandler
{        
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
         // do something
         ....
         return base.GetHttpHandler(requestContext);
    }
}

在我的Global.asax.cs文件中我有:

protected void Application_Start()
    {
        // ............ 
        RegisterRoutes(RouteTable.Routes);
        // ............
     }


 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("elmah.axd");
        //routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

       routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        ).RouteHandler = new CustomMvcRouteHandler();
     }

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我不完全确定你在问题中的意思,但我会尽力回答......

要模拟IgnoreRoute您需要做的就是从您的路线关联StopRoutingHandler的实例。如果您正在使用内置的ASP.NET“Route”类,那么您将执行以下操作:

routes.MapRoute(
    "Ignore-This", // Route name
    "ignore/{this}/{pattern}" // URL with parameters
).RouteHandler = new StopRoutingHandler();

与该模式匹配的任何内容都将导致路由系统立即停止处理更多路由。

如果要编写自己的自定义路由(例如,从RouteBase派生的新路由类型),则需要从GetRouteData方法返回StopRoutingHandler

答案 1 :(得分:0)

@Eilon是正确的答案。这是一种感觉更MVCish的替代语法。

routes.Add("Ignore-This",
    new Route(
        "ignore/{this}/{pattern}",
        new StopRoutingHandler())
);