我有一个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&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王国的一切都很好。
答案 0 :(得分:4)
尝试routes.Ignore而不是routes.IgnoreRoutes
我的一些处理程序映射到子目录,所以我使用正则表达式,它必须是完全匹配而不是部分
routes.Ignore("{*legecy}", new { legecy = @".*\.(aspx|ashx|asmx|axd|svc)([/\?].*)?" });