我有一个网站,直到最近才通过aspx将png图像嵌入另一个aspx中,生成的html代码如下所示:
<div class="widgetcontent" style="padding: 0px; margin: 0px; padding-left: 5px;">
<div id="ctl00_CPHMaster_UPRanges">
<img id="ctl00_CPHMaster_IMRanges" src="range.aspx" style="height:280px;width:460px;border-width:0px;" />
</div>
</div>
range.aspx仅提供了动态创建的png图像。
我现在更改了range.aspx,以便它提供一个svg并更改了嵌入页面,以使生成的html代码现在看起来像这样:
<div class="widgetcontent" style="padding: 0px; margin: 0px; padding-left: 5px;">
<div id="ctl00_CPHMaster_UPRanges">
<img id="ctl00_CPHMaster_IMRanges" type="image/svg+xml" src="range.aspx" style="height:280px;width:460px;border-width:0px;" />
</div>
</div>
但是,这行不通。这些是事实:
a)它可以在由Visual Studio 2012创建的ASP.NET开发服务器上的Windows开发人员机器上正常工作。
b)它可以在运行IIS 8.5的测试计算机上正常工作。
c)它在运行IIS 7.5的生产计算机上不起作用。
d)“它不起作用”的意思是:应该显示嵌入式svg的页面只是显示了损坏的图像符号。
e)但是,当我右键单击损坏的图像符号并选择“查看图像”时,将显示svg!
f)当我右键单击唯一的svg并选择“查看页面源代码”时,它显示的是纯svg文本,周围没有html。
g)在网络写入中必须在IIS 7.5配置中启用svg的某些位置。我已经做到了。它仍然不起作用。
h)这不是浏览器问题,我已经使用Chrome,IE,Firefox和其他工具进行了检查。
任何帮助表示赞赏。
更新1:因为Brando Zhang询问了range.aspx代码,原则上看起来像这样:
<%@ Import Namespace="WVA.Client.Web" %>
<%@ Page Language="c#" AutoEventWireup="true" Culture="en-Us" UICulture="auto" %>
<%@ Import Namespace="WVA.ServiceAccessLayer.WebService" %>
<%@ Import Namespace="WVA.SharedBusinessLogic" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN">
<html>
<head>
<script runat="server" language="C#">
protected void Page_Load(object sender, EventArgs e)
{
Response.Clear();
byte[] imageByteData = funcGetImage(bildformat);
if (format == Format.Svg)
{
Response.ContentType = "image/svg+xml";
Response.Flush();
string imageTextUtf8 = Encoding.UTF8.GetString(imageByteData, 0, imageByteData.Length);
Response.Write(imageTextUtf8);
}
else if (format == Format.Png)
{
Response.ContentType = "image/png";
Response.Flush();
Response.BinaryWrite(imageByteData);
}
Response.End();
}
</script>
</head>
</html>
更新2:由于Hackerman的提示,我试图将其添加到web.config:
<staticContent>
<remove fileExtension=".svg" />
<mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>
这并没有使嵌入式图像变得更好。但是它产生了有趣的效果,随后在Chrome和Opera中,“在单独的选项卡中查看图像”不再显示svg图像,而是显示svg文本。 Firefox仍显示该图像。
更新3: 根据Lex Li的提示,我们已使用Chrome的开发人员工具进行了检查。在那里找不到任何错误。但是有趣的是: 没关系的地方,响应标头包含以下行 内容类型:image / svg + xml 。在IIS 7.5不能正常运行的情况下,响应标头中没有 Content-Type:。
答案 0 :(得分:0)
我们已经找到解决问题的方法。 最初,我们使用以下代码来创建图像:
Response.ContentType = "image/svg+xml";
Response.Flush();
string imageTextUtf8 = Encoding.UTF8.GetString(imageByteData, 0, imageByteData.Length);
Response.Write(imageTextUtf8);
这不适用于IIS 7.5, Response.Flush()似乎删除了IIS 7.5中的Content-Type。 (但不在IIS 10或ASP.NET Development Server 11中。)
使用以下代码,不会删除Content-Type,并且一切正常。
Response.ContentType = "image/svg+xml";
string imageTextUtf8 = Encoding.UTF8.GetString(imageByteData, 0, imageByteData.Length);
Response.Write(imageTextUtf8);
Response.Flush();