.net - .NET 可以拦截和更改 css 文件吗?

标签 .net asp.net .net-3.5 httpmodule .net-1.0

更新 1:

我现在已经设置了 IIS6,因此 .NET 可以处理对 .css 文件的调用。我现在该怎么做才能让它根据引用 url 更改 css 文件?所以如果引荐网址是 http://intranet/ ,它应该继续调用旧样式表。如果引荐网址是 http://intranetv2/ ,它应该调用新的样式表。

原问题:

后台:

我有 2 个搜索引擎。一个是旧的,另一个是全新的(开发阶段)。搜索引擎 1 在 domain1.com 上,搜索引擎 2 在 domain2.com 上。两个域都在同一台服务器上。两者都根据用户在搜索引擎中输入的内容在 domain1.com 上搜索网页。两种搜索引擎之间的区别在于,新的搜索引擎速度更快,产生的结果更准确,并且用户界面得到了极大改进。这两个搜索引擎都将保持活跃,这样用户就可以在他们自己的时间适应新的搜索引擎,而不是将它们扔进深渊并完全删除旧的搜索引擎。

无论如何,背景已经足够了,基本上,因为可搜索页面位于旧搜索引擎的旧域名上,而新搜索引擎位于新域名上,......

问题:

...我可以使用 HttpModule 或 .NET 的另一部分,或来自 IIS6 的东西来捕获新搜索引擎生成的页面链接,并动态更改附加到旧域上旧可搜索页面的 css 文件吗?

原因:

实际上使它看起来像一个全新的网站,如果旧域上的搜索引擎用于访问旧域上的页面,则使用旧样式表,但如果新域上的搜索引擎用于访问访问旧域名上的可搜索文件,应使用新样式表使旧页面看起来新。由于有大量可搜索的页面,在 10,000 个区域内,编辑每个页面以添加 if 语句以在向页面添加样式表之前检查引用域名是不现实的选择。

环境:

旧搜索引擎,以及旧域上的可搜索页面使用 .net 1.something,但新域名上的新搜索引擎使用 .net 3.5,而我使用 vb.net 作为 asp.net 页面.服务器是 IIS6 服务器。

最佳答案

  • 在 IIS 中,设置 HttpHandler 以接收您想要的所有文件类型(表示您已完成此操作)
  • 用户 Server.MapPath()HttpRequest.Url.AbsolutePath获取物理路径
  • 根据域修改路径
  • 将文件写入响应流。

  • 这是一个处理程序(简化),我经常使用它来为不同域提供备用文件:
    using System;
    using System.IO;
    using System.Web;
    public class MultiDomainFileHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            string filePath = GetDomainSpecificFilePath(context.Request.Url.Host,
                context.Server.MapPath(context.Request.Url.AbsolutePath));
    
            if (File.Exists(filePath))
            {
                switch (Path.GetExtension(filePath).ToLower())
                {
                    case ".css": context.Response.ContentType = "text/css"; break;
                    case ".jpg":
                    case ".jpeg": context.Response.ContentType = "image/jpeg"; break;
                    //other types you want to handle
                    default: context.Request.ContentType = "application/octet-stream"; break;
                }
                context.Response.WriteFile(filePath); //Write the file to response
            }
            else context.Response.StatusCode = 404;
        }
    
        private string GetDomainSpecificFilePath(string domain, string originalPath)
        {
            string prefix = "";
            switch (domain.ToLower())
            {
                case "intranetv2": prefix = FILE_PREFIX_INTRANETV2; break;
                case "www.example.com": prefix = FILE_PREFIX_EXAMPLE_DOT_COM; break;
                //other domains you want to handle
            }
            string dir = Path.GetDirectoryName(originalPath);
            string fileName = prefix + Path.GetFileName(originalPath);
            return Path.Combine(dir, fileName);
        }
    
        const string FILE_PREFIX_INTRANETV2 = "v2.", FILE_PREFIX_EXAMPLE_DOT_COM = "ex.com.";
        public bool IsReusable { get { return false; } }
    }
    

    现在,您只需要在相同目录中有备用文件。例如:

    /图像/标志.jpg

    /Images/v2.logo.jpg

    /样式/mystyle.css

    /Styles/v2.mystyle.css

    我希望这会有所帮助:)

    关于.net - .NET 可以拦截和更改 css 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6200427/

    相关文章:

    .net - Visual Studio 2008 中的 BaseOutputPath 错误?

    c# - C#中如何计算异步方法的执行时间

    .net - 为什么 .NET 4.5 中没有 CallerTypeNameAttribute?

    html - 如何在中继器内显示交替部分

    c# - 如何遍历 Treeview 节点的所有层?

    c# - 组合框 SelectedIndexChanged 事件 : how to get the previously selected index?

    java - WCF Duplex 服务和 Android 客户端?任何可能性

    c# - ASP Web API 帮助页面 - 从 XML <see> 标记链接到类

    asp.net - 如何以编程方式查找 ASP.NET App_Data 文件夹路径

    c# - 在现有对象中实现 Nullable 类型