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

时间:2013-08-02 18:30:43

标签: asp.net routing webforms

我们有遗留代码来维护,并且为了解决特定的客户定制问题,我们希望将对某些文件的调用路由到其他文件。也就是说,当应用程序调用特定的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.NET Web窗体中使用路由来调用特定的CSS文件来实际检索另一个。客户需要这个来进行定制。

1 个答案:

答案 0 :(得分:1)

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