如何在ASP.NET Forms URL路由中忽略路由?

23
我正在使用.NET 3.5 SP1框架,并在我的应用程序中实现URL路由。我遇到了JavaScript错误:
Error: ASP.NET Ajax客户端框架加载失败。
资源被解释为脚本,但传输时的MIME类型为text/html。
ReferenceError:找不到变量:Sys

我认为这是因为我的路由正在拦截microsoft axd文件,而没有正确地发送JavaScript。我进行了一些研究,发现可以使用Routes.IgnoreRoute,这应该允许我忽略如下的axd文件:

Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

但是,当我在Global.asax中添加那行代码时,我遇到了这个错误:

CS1061: 'System.Web.Routing.RouteCollection' 不包含名为 'IgnoreRoute' 的定义,并且找不到接受类型为 'System.Web.Routing.RouteCollection' 的第一个参数的扩展方法 'IgnoreRoute' (是否缺少 using 指令或程序集引用?)

我已经导入了System.Web.Routing名称空间,有什么想法吗?

4个回答

40

您不需要引用ASP.NET MVC。您可以使用实现了IRouteHandler的StopRoutingHandler,方法如下:

routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));

这是 .NET 3.5 SP1 的一部分,不需要 MVC。 IgnoreRoutes 方法是一个方便的扩展方法,是 ASP.NET MVC 的一部分。


我该如何在ASP.NET Core(MVC 6)中忽略*.php文件?这与以往有很大不同! - user153923

8

旧问题,但如果仍有人需要帮助,这对我有效:

routes.Ignore("{resource}.axd/{*pathInfo}");

“忽略”方法是存在的,而在标准的ASP.NET中,“IgnoreRoute”方法似乎不存在(即不使用MVC)。这将实现与Haacked代码相同的结果,但稍微更加简洁...

1
True,但是 Ignore 方法从 .Net 4 开始可用。OP 正在使用 3.5 SP1。 - an phu

3

我想补充一点,您还需要确保您的IgnoreRoutes规则的顺序是正确的,否则您的第一个路由将首先应用,您的IgnoreRoute将被忽略。


1

MapRoute和IgnoreRoute是System.Web.Mvc中的扩展方法 --- 您是否正确引用了该程序集?


我没有使用MVC,所以我没有这个程序集的引用。我需要单独下载MVC程序集才能使用IgnoreRoute吗?还是它应该是 .NET 3.5 SP1 的一部分? - Austin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接