不能忽视ASHX路线

时间:2014-04-30 17:11:56

标签: asp.net-mvc asp.net-mvc-4

我有一个MVC Web应用程序,它继承并且是Webform框架的一部分。 webform框架的一部分输出了几个ASHX处理程序。哪个,我无法使用routes.clear()删除,因为这会将它们全部删除。我仍然需要使用它们。

这是我的问题所在,我有,<link href="@Url.Action("Index", "Styles")" rel="stylesheet" type="text/css" />这指向一个生成动态CSS样式属性的控制器。

当页面呈现时Url.Action看起来像这样 -

<link href="/MyLayout/Handlers/LoginStyleHandler.ashx?
      action=Index&amp;controller=Styles" rel="stylesheet" type="text/css">

在这里尝试忽略这条路线是我尝试过的。这些都不起作用。是什么赋予了?我该怎么做才能使ASHX路径远离Url.Action HTML帮助程序。

routes.IgnoreRoute("{Handlers}.ashx");
routes.IgnoreRoute("{Handlers}/{resource}.ashx/{*pathInfo}");
routes.IgnoreRoute("TMW_LayoutPrototype/Handlers/LoginStyleHandler.ashx");
routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });
routes.IgnoreRoute("Handlers/LoginStyleHandler.ashx");
routes.IgnoreRoute("{*allashx}", new { allashx = @".*\.ashx(/.*)?" });

更新

http://regexpal.com/使用Regex测试人员,让我知道我的正则表达式模式@".*\.ashx(/.*)?"有效。但是,它不会从Web应用程序的MVC端删除处理程序。

结论

我的问题的根源来自应用程序的Web表单方面。低估,在框架内,MVC应用程序继承了路由引擎。所以,我在MVC中的路由被放置在堆栈的底部,Webform路由位于顶部。

忽略路由不起作用,因为路由是在application_start事件上创建的。忽略或将我的MVC路由放在堆栈的顶部是行不通的,因为那时我会丢失Session,以及表示auth。

解决方案是在Webform路由代码中编写一个约束,以避开我的MVC应用程序。之后,MVC王国的一切都很好。

1 个答案:

答案 0 :(得分:4)

尝试routes.Ignore而不是routes.IgnoreRoutes

我的一些处理程序映射到子目录,所以我使用正则表达式,它必须是完全匹配而不是部分

routes.Ignore("{*legecy}", new { legecy = @".*\.(aspx|ashx|asmx|axd|svc)([/\?].*)?" });