sno*_*tis 2 asp.net-mvc asp.net-mvc-4
我有一个 MVC Web 应用程序,它继承并是 Webform 框架的一部分。webform 框架的一部分输出几个 ASHX 处理程序。其中,我无法删除 with 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">
Run Code Online (Sandbox Code Playgroud)
至于试图忽略这条路线,这是我尝试过的。这些都不起作用。是什么赋予了?我该怎么做才能将 ASHX 路径排除在我的Url.ActionHTML 帮助程序之外。
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(/.*)?" });
Run Code Online (Sandbox Code Playgroud)
使用http://regexpal.com/ 上的 Regex 测试器让我知道我的 Regex 模式@".*\.ashx(/.*)?"是有效的。但是,它不会从 Web 应用程序的 MVC 端删除处理程序。
我的问题的根源源于应用程序的 Web 表单方面。低调地看,在框架内部,MVC 应用程序继承了一个路由引擎。因此,我在 MVC 中的路由位于堆栈底部,而 Webform 路由位于顶部。
忽略路由不起作用,因为路由是在 application_start 事件上创建的。忽略或将我的 MVC 路由放在堆栈顶部不起作用,因为那样我会丢失会话以及表单身份验证。
解决方案是在 Webform 路由代码中编写一个约束以远离我的 MVC 应用程序。之后在 MVC 王国中一切都很好。
尝试 routes.Ignore 而不是 routes.IgnoreRoutes
我的一些处理程序映射到子目录,所以我使用了正则表达式,它必须是完全匹配而不是部分匹配
routes.Ignore("{*legecy}", new { legecy = @".*\.(aspx|ashx|asmx|axd|svc)([/\?].*)?" });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1516 次 |
| 最近记录: |