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

无法在ASP.NET WebForms中路由静态文件,asp.net,routing,webforms,Asp.net,Routing,Webforms,我们需要维护遗留代码,为了解决特定的客户定制问题,我们希望将对某些文件的调用路由到其他文件。也就是说,当应用程序调用某个特定的ASPX时,它最终会命中另一个ASPX 如果你打电话: www.foo.com/admin/admin.aspx 它实际上会击中: www.foo.com/customizations/customer1/admin/admin.aspx 这不是一个好的设计,但这是遗留代码。我们只是想解决这个问题 我们正在使用System.Web.Routing框架来解决这个问题。当

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

如果你打电话:

www.foo.com/admin/admin.aspx
它实际上会击中:

www.foo.com/customizations/customer1/admin/admin.aspx
这不是一个好的设计,但这是遗留代码。我们只是想解决这个问题

我们正在使用
System.Web.Routing
框架来解决这个问题。当您将
RouteExistingFiles
设置为true时,除了静态文件(CSS、JavaScript和图像)之外,这一切都可以正常工作。 我第一次尝试时,它检索到以下错误:

扩展“.css”没有生成提供程序注册

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

它起作用了!但是CSS提供了
text\html
内容类型

如何实现这一点?


TL;DR:我想使用ASP.NETWeb表单中的路由来调用特定的CSS文件以实际检索另一个CSS文件。客户需要此功能进行定制。

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

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

如果您愿意,我可以发布一个指向我所遵循的教程的链接。很抱歉您的回复,但我确实需要静态内容的当前URL才能继续工作。我只需要将它们路由到不同的静态文件。ASHX处理程序需要我更改URL。无论如何,谢谢你。不,当我这么做的时候,URL没有改变,你不需要ASHX。我想你可以创建一个继承自IHttpHandler的类。如果你愿意,我可以发布一个指向我遵循的教程的链接。很抱歉你的回复,但我真的需要静态内容的当前URL来继续工作。我只需要将它们路由到不同的静态文件。ASHX处理程序需要我更改URL。无论如何,谢谢你。不,当我这么做的时候,URL没有改变,你不需要ASHX。我想你可以创建一个继承自IHttpHandler的类。