2011-04-15 53 views
0

我在asp.net 4 webforms中使用路由。我有一个主题的DLL,其中包含所有图像,外观和感觉所需的CSS和JS文件。我只有1个页面动态加载页面中的控件。我使用路由来区分请求。定义了以下路由:忽略嵌入式资源路由ASP.NET 4 WebForms

routes.Ignore("{resource}.axd/{*pathInfo}"); 
routes.MapPageRoute("Default-All-Pages", "Pages/{*OtherParams}", "~/Default.aspx", false); 

用于管理嵌入式资源的处理程序已经定义。当应用程序通过代码执行时,将请求重定向到default.aspx。然后继续加载css文件并再次将请求路由到default.aspx。

我希望它将css/jpg请求路由到虚拟路径处理程序,而不是页面。我应该定义什么路线,以便文件的请求不会被default.aspx页面处理?

回答

0
routes.Ignore("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" }); 
routes.Ignore("{*allcss}", new { allcss = @".*\.css(/.*)?" }); 
routes.Ignore("{*alljpg}", new { alljpg = @".*\.jpg(/.*)?" }); 
routes.Ignore("{*alljs}", new { alljs = @".*\.js(/.*)?" }); 

这解决了我的问题。

+0

这也解决了在.aspx文件和catchall路径中使用web方法时的问题。 – Sam 2014-05-02 17:01:44

0

你忽略HttpHandlers的同样的方法,你可以添加忽略CSS和JPG文件的规则:

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

这些将会从路由表中被排除在外,并会被任何注册的处理程序/模块来处理/ ISAPI过滤器。

+0

我已经试过了。 Doens't似乎工作.... – 2011-04-15 09:07:10

+0

你也尝试过:'routes.Add(新的System.Web.Routing.Route(“{资源} .css/{* pathInfo}”,新的System.Web.Routing。 StopRoutingHandler()));'? – lukiffer 2011-04-15 09:10:41

+0

是的,我似乎没有工作。实际上,我截获了来自global.asax begin request的请求,并且每当有webresources.axd的请求时,它都不会命中aspx init。当有一个对css文件的请求时,它会碰到aspx页面的init。 – 2011-04-15 09:15:10