//standard routing
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
//the custom route I added
routes.Add(
new Route("Fish/Image",
new ImageHandlerRouteHandler()
)
);
我认为这会使用我的ImageHandlerRouteHandler
,但我在Fish/Image
得到的只是404。
答案 0 :(得分:8)
在默认路线之前添加路线。
routes.Add(
new Route("Fish/Image",
new ImageHandlerRouteHandler()
)
);
//standard routing
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
请求映射到路由表中的第一个匹配路由。由于默认路由没有限制,因此会在自定义路由之前调用它。
答案 1 :(得分:3)
如果在默认路由之前有Fish/Image
路由,则MVC构建链接中的问题是Fish / Image路由似乎满足所有请求。为了使这条路线有效,请按如下方式进行更改:
routes.Add(
"FishImage",
new Route(
"{controller}/Image",
new RouteValueDictionary(new { controller = "Fish" }),
new RouteValueDictionary(new { controller = @"^(?!fish).+" }),
null,
new ImageHandlerRouteHandler()
)
);
这会改变路线,因此在链接建设方面,您的其他链接将无法通过此路线。目前,MVC认为它可以构建任何匹配此路由的链接,因此确实如此。使用受约束的路由,MVC现在将看到其他链接将失败此路由。
答案 2 :(得分:1)
路线显示的顺序很重要。首先添加您的路线,然后将默认值作为后退。