【问题标题】:Stop asp.net image control automatically UrlEncoding the ImageUrl parameter停止asp.net图像控件自动Url Encoding Image Url参数
【发布时间】:2026-02-09 15:35:01
【问题描述】:

默认情况下,asp.net 图像控件会尝试提供帮助并自动对设置为 ImageUrl 属性的任何内容进行编码,因此:

imgSomething.ImageUrl = "Generator.aspx?x=1&y=2&z=3";

变成

"Generator.aspx?x=1&y=2&z=3"

问题是我想传递Base64编码的参数,我需要手动Server.UrlEncode,因为每个参数都可以包含会导致问题的字符。

所以基本上我的问题是:如何阻止图像控件自动对我设置为 ImageUrl 参数的内容进行 UrlEncoding?

【问题讨论】:

    标签: c# asp.net encoding user-controls


    【解决方案1】:

    我认为你应该使用服务器控制。不是asp控制。

    <img ID="Image2" src="" alt="" runat="server" />
    Me.Image2.Src = "&&&"
    

    它有效。

    【讨论】:

      【解决方案2】:

      我们遇到了同样的问题。我们的解决方法是将所有参数打包成一个 URLEncoded 和 Base64 编码参数,并在另一侧自行拆分。我们在 WebResource.axd 和 ScriptResource.axd 中注意到了类似的方法。

      快速而肮脏的方式(使用简单的辅助方法进行 Base64 编码/解码):

      string parameters = args.Join('|');
      imgSomething.ImageUrl = "Generator.aspx?d=" + Server.UrlEncode(Base64Encode(parameters));
      

      在 Generator.aspx 中:

      string data = Base64Decode(Server.UrlDecode(Request.QueryString["d"].ToString().Trim()));
      string[] parameters = data.Split('|');
      

      如果您想使用查询字符串样式的参数字符串(即 x=1&y=2&z=3),有一堆示例代码可以让您在字符串和 NameValueCollection 之间移动。

      【讨论】: