我有一个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/上使用正则表达式测试器可以让我知道我的正则表达式模式@".*\.ashx(/.*)?"是有效的。但是,它不会从web应用程序的MVC端删除处理程序。
结论
我的问题的根源在于应用程序的web forms端。不出所料,在框架内部,MVC应用程序继承了一个路由引擎。因此,我在MVC中的路由被放在堆栈的底部,而Webform路由放在顶部。
忽略路由不起作用,因为路由是在application_start事件上创建的。忽略或将我的MVC路由放在堆栈的顶部是行不通的,因为那样我就会丢失会话以及表单身份验证。
解决方案是在Webform路由代码中编写一个约束,使其远离我的MVC应用程序。在那之后,在MVC王国里一切都很好。
发布于 2015-02-18 01:48:35
尝试routes.Ignore而不是routes.IgnoreRoutes
我的一些处理程序映射到子目录,所以我使用regex,它必须是完全匹配,而不是部分匹配
routes.Ignore("{*legecy}", new { legecy = @".*\.(aspx|ashx|asmx|axd|svc)([/\?].*)?" });https://stackoverflow.com/questions/23394164
复制相似问题