【问题标题】:ASP.NET: change link to static asset dynamicallyASP.NET:动态更改静态资产的链接
【发布时间】:2010-11-08 20:31:00
【问题描述】:

我们正在构建一个内部静态资产服务器。每个环境(dev、staging、prod)都有自己的资产服务器,并且资产在整个 Web 应用程序(html、aspx、ascx、css、javascript 等)中都是引用的

要在正确的环境中引用正确的资产服务器,一种解决方案是编写一个 http 模块以在响应到达客户端之前拦截响应并相应地更改 URL。我只是在想这可能不是最具可扩展性的解决方案,因为这个 http 模块将为每个请求执行,并且基本上在客户端获取之前解析整个响应(有些是巨大的)。

我也在考虑使用客户端 javascript 来更改客户端的引用,但这可能无法像 http 模块那样工作。

有什么想法吗? ASP.NET 的行业最佳实践是什么?

【问题讨论】:

    标签: asp.net rewrite assets


    【解决方案1】:

    如果您希望您的网站在没有 Javascript 依赖的情况下运行(即使只是部分),那么您应该保留此服务器端。

    您上面提到的另一种方法是在应用程序级别执行此操作,即有一个库方法来生成您的静态资产 URL,并配置为通过您的 web.config 指向特定服务器。


    它会是这样的:-

    (在您的 App_Code 文件夹或引用的程序集中)

    public static class Util
    {
        public static string AssetUrl(string relativePath)
        {
            // returns asset server address from web config with relative path appended
        }
    }
    

    (在 web.config 中)

    <appSettings>
        <add key="AssetServerBaseUrl" value="http://foo.bar" />
        ...
    </appSettings>
    

    (在您的 aspx 文件中)

    <img src='<%= Util.AssetUrl("img/myimage.jpg") %>' ... />
    

    【讨论】:

    • @AdamRalph:对于您提到的替代方法,您有任何示例吗?我唯一能想到的就是使用构建提供程序来更改每个构建的静态资产的所有链接。
    • @AdamRalph:我认为这只适用于像 aspx/ascx 这样的动态页面。 CSS 中的背景图片链接或 HTML 中的一般锚标记呢?
    • 没错,它只适用于动态页面。这个问题是在 ASP.NET 的上下文中提出的,所以我认为这个解决方案可能适合你。如果您也有静态内容,那么您将不得不采用另一种解决方案。
    【解决方案2】:

    我可能会创建自己的 LinkToStaticAsset 控件。它只接受相对于每个资产的静态资产服务器的路径。我会让它通过包含配置中的基本路径来生成完整的 URL。

    【讨论】:

    • @John Sannders:如何处理 css、js 和 html 文件?
    猜你喜欢
    • 2022-11-05
    • 2022-07-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多