【问题标题】:Cannot route static files in ASP.NET WebForms无法在 ASP.NET WebForms 中路由静态文件
【发布时间】:2013-08-02 18:30:42
【问题描述】:

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

【问题讨论】:

    标签: asp.net routing webforms


    【解决方案1】:

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

    【讨论】:

    • 如果您愿意,我可以发布指向我遵循的教程的链接。
    • 抱歉您的回复,但我确实需要静态内容的当前 URL 才能继续工作。我只需要将它们路由到不同的静态文件。 ASHX 处理程序将要求我更改 URL。还是谢谢你。
    • 不,当我这样做时,URL 没有改变,你不需要 ASHX,你可以创建一个继承自 IHttpHandler 的类,我认为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2016-01-06
    • 1970-01-01
    相关资源
    最近更新 更多