Skip to main content
 首页 » 编程设计

c#之在代码中访问 WebResource.axd 文件内容时出现问题

2024年02月23日38shanyou

我正在尝试将所有 css 文件合并到一个 css 文件中。

问题在于获取 WebResource.axd 文件。我知道我可以发出 http 请求来获取它,但我也知道我应该能够在 AssemblyResourceLoader 中获取它。

url格式为WebResource.axd?d=加密标识符&t=时间戳值

我面临的问题是解密加密的标识符,以便我可以检索 css。

有关获取解密标识符的任何帮助或获取页面网络资源内容的替代方法。

谢谢

更新: 我找到的用于解密 id 的代码。下一个要解决的问题是访问资源中的内容。这是解密代码

public string DecryptWebResourceIdentifier(string urlEncodedData) 
{ 
 
    byte[] encryptedData = HttpServerUtility.UrlTokenDecode(urlEncodedData); 
    string decrypted=""; 
    Type machineKeySection = typeof(MachineKeySection); 
    Type[] paramTypes = new Type[] { typeof(bool), typeof(byte[]), typeof(byte[]), typeof(int), typeof(int) }; 
    MethodInfo encryptOrDecryptData = machineKeySection.GetMethod("EncryptOrDecryptData", BindingFlags.Static | BindingFlags.NonPublic, null, paramTypes, null); 
    try 
    { 
        byte[] decryptedData = (byte[])encryptOrDecryptData.Invoke(null, new object[] { false, encryptedData, null, 0, encryptedData.Length }); 
        decrypted = Encoding.UTF8.GetString(decryptedData); 
    } 
    catch 
    { 
    } 
    return decrypted; 
} 

请您参考如下方法:

我需要建议您,这可能是一种糟糕的方法。动态组合 CSS 会浪费资源,并且应用程序目前可能无法按预期执行。

推荐的方法是在构建时结合 CSS、压缩 JavaScript 或任何客户端优化。这就是管理 MSBuild 来执行一项任务,该任务必须在您编译 ASP.NET 应用程序时合并/压缩 CSS。

您可以使用 Yahoo UI 库。它有一个 .NET 端口:

最后,您可以像这样实现一个非常简单的 MSBuild 任务:

<CombineCSS Files="@(CSSFiles)"  />  

因此它将执行一段代码,读取给定文件路径 (CSSFiles) 的文本并将它们附加到内存流,然后您可以获取该流,将其转换为字符串并使用 YUI 进行压缩。

此任务可以作为构建后事件的子节点添加到 csproject MSBuild 标记源代码中。

你会得到一个像“Style.css”这样的文件,它可能包含来自所有文件的所有 CSS 代码,并且压缩得很好!!