首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET中的图像内容分发网络

ASP.NET中的图像内容分发网络
EN

Stack Overflow用户
提问于 2010-03-28 03:49:55
回答 9查看 7.9K关注 0票数 2

我正在将web应用程序中的所有图像移动到CDN,但我希望能够轻松地打开或关闭CDN,而不必硬编码图像的路径。

我的第一个想法是为图像扩展添加一个HttpHandler,这取决于web.config中的某个变量(类似于)将为来自服务器还是来自CDN的图像提供服务。但在给出一点之后,我认为我基本上已经排除了这一点,因为它将导致ASP.NET处理每个单独图像的请求,从而增加开销,实际上它可能会完全消除使用CDN的好处。

另一种方法是,因为我的所有页面都继承自一个基页类,所以我可以在基类中创建一个函数,该函数根据web.config变量确定提供文件的路径。然后,我将在标记中执行类似以下操作:

代码语言:javascript
复制
<img src='<%= GetImagePath()/image.png' />

我想这可能是我最终要做的事情,但对我来说似乎有点笨拙。我还设想了由于"<%=“而无法修改控件集合的旧.NET错误的问题,尽管"<%#”解决方案可能会起作用。

对如何实现这一点有什么想法或想法吗?

EN

回答 9

Stack Overflow用户

发布于 2010-03-28 03:59:54

您已经忽略了基于预优化的假设编写HttpHandler。我会重新考虑这一点,并且肯定会编写一个简单的HttpHandler并对其进行测试。您可能会发现您的Page方法解决方案甚至可能会更慢,特别是当您使用ASP预处理器时。

HttpHandlers非常接近金属--对于IIS来说,将请求交给ASP.Net的开销很小。这将是一个比你提议的更优雅的解决方案,而且可能更具可扩展性,我敢打赌--更快。

票数 2
EN

Stack Overflow用户

发布于 2010-03-30 00:04:06

你有没有考虑过稍微简单一点的方法?

如果您的页面都继承自一个基类,那么您可以向您的CDN (或者,如果您想关闭CDN,则向您的本地服务器)公开一个包含前置URL的属性。然后,将前置URL存储在web.config中就是一件微不足道的事情:

代码语言:javascript
复制
public string PrependURLPath() {
 get { return ConfigurationManager.AppSettings["ImagePrependURL"].ToString(); }
}

在您的<appSettings/>元素中,您可以简单地选择前置URL,例如:

http://my.cdn.com/user/

或者:

代码语言:javascript
复制
http://my.own.server.com/images/

非常简单!

然后你就可以按照你的例子来编码你的图片引用,但是调用你的基页属性来公开你想要的路径:

代码语言:javascript
复制
<img src='<%= this.BasePage.PrependURLPath() + [YourImagePath.png] %>'/>

我同意通过内联调用设置图像源是一件很麻烦的事情,但您可能会按照其他人的建议进行操作,然后迭代页面上的图像控件,并在执行过程中更改前置URL。

即使您的页面当前仅从System.Web.UI.Page继承,创建继承System.Web.Page的您自己的基类,然后在解决方案中对所有其余页面执行查找/替换也是一件简单的事情。

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2011-03-07 20:52:24

在这里考虑已经很晚了,但我自己也在寻找类似的解决方案。我用谷歌搜索了一下我的所作所为。我没有考虑HttpHandler方法,我只是简单地扩展了ASP.net Image控件:

代码语言:javascript
复制
public class Img : Image
{
    public Img()
    {
        RelativePath = false;
    }

    public bool RelativePath { get; set; }

    public override string ImageUrl
    {
        get
        {
            if (RelativePath)
                return base.ImageUrl;

            return "http://some.configurable-value.com" + base.ImageUrl;
        } 
        set { base.ImageUrl = value; }
    }
}

它是粗糙的,但它是有效的:)显然,它应该依赖于一些可配置的值,而不是字符串文字,但这并不是一个大的变化

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2530709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档