无法在ASP.NET WebForms中路由静态文件



我们需要维护遗留代码,为了解决特定的客户定制问题,我们希望将对某些文件的调用路由到其他文件。也就是说,当应用程序调用某个特定的ASPX时,它最终会调用另一个ASPX。

如果您拨打:

www.foo.com/admin/admin.aspx

它将实际命中:

www.foo.com/customizations/customer1/admin/admin.aspx

这不是一个好的设计,但这是遗留代码。我们只是想解决这个问题。

我们使用System.Web.Routing框架来解决这个问题。当你将RouteExistingFiles设置为true时,这很好,静态文件(CSS、JavaScript和Images)除外。当我第一次尝试它时,它检索到了这个错误:

没有扩展名".css"的生成提供程序注册。

因此,我确实在web.config文件中为.css扩展名注册了一个生成提供程序。我使用了这个构建提供程序:PageBuilderProvider,因为有人在互联网上推荐了它。

它有效!但是CSS使用texthtml内容类型。

我该如何做到这一点

TL;DR:我想在ASP.NET Web窗体中使用路由来调用特定的CSS文件,以实际检索另一个文件。客户需要此进行定制。

尝试编码一个HttpHandler。我不得不做一些类似的事情,但对于PDF文件,我最终编码了一个自定义的HttpHandler,效果非常好。您甚至可以在HttpHandler代码中设置内容类型,并在web.config中使用与处理程序模式匹配的路径。您还可以在web.config中将其配置为,如果路径不指向现有文件,则不执行该路径。例如,返回404,而无需在处理程序本身中对此进行编码。我不能在ATM上发布我的代码(VB.NET),因为我使用的是平板电脑,但谷歌搜索教程。您可能还需要使用TransmitFile函数来实际编写css文件。它是一个网页表单项目还是网站?如果它是一个网站,则有一种特殊的方法可以在web.config中注册HttpHandler。

最新更新