如何使用Visual Studio为SVG和Web测试配置IIS?


14

假设我有一个包含SVG图片的简单网页:

<img src="foobar.svg" alt="not working" />

如果我将此页面设置为静态html页面并直接查看,则会显示svg。如果我键入此svg的地址,则会显示它。

但是,当我将其设置为.aspx页并从Visual Studio动态启动时,我得到了alt文本。如果我键入此svg的地址(从本地主机而不是本地文件),则浏览器将尝试下载而不是显示。

我已经在IIS中定义了mime类型(对于整个服务器-“ image / svg + xml”),然后重新启动了IIS。和以前一样。

问题:我该怎么办?

更新资料

WireShark不起作用(在文档中),我也尝试过RawCap,但是它无法跟踪我的连接(奇数),幸运的是Fiddler起作用了:

来自客户:

GET http://127.0.0.1:1731/svg/document_edit.svg HTTP/1.1
Host: 127.0.0.1:1731
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

来自服务器的答案:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 16 Feb 2012 11:14:38 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: application/octet-stream
Content-Length: 87924
Connection: Close

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:

*** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. ***

作为记录,以下是有关提琴手的有用的问答:https : //stackoverflow.com/questions/826134/how-to-display-localhost-traffic-in-fiddler-while-debugging-an-asp-net-applicati


认为您可能会在SO上获得更好的答案。简而言之,假设ASPX已在运行,则需要从ASPX页面发出SVG作为MIME类型,以使浏览器认为它是SVG文件。您大概正在尝试从页面动态发出SVG吗?如果是这样,则AFAIK如果可以作为单个页面使用,它将在IMG条目中使用。
TristanK '02

@ TristanK,aspx不会发出“ SVG作为MIME类型”,它仅包含<img src...上述内容,aspx被“翻译”为完整的html页面,但是发送全部内容(html,然后是svg)是由IIS完成的。
greenoldman '02

我仍然不明白您在说什么,但是我认为这是一个开发问题,因此最好在StackOverflow上询问。
TristanK'2

2
获取Fiddler的副本,然后跟踪两个不同的请求。这可能会为您提供一些线索,说明在每种情况下对图像的直接请求行为都不同的原因。线索很可能在返回的标头中。没有这些数据,我们所能做的只是猜测服务器返回的响应。
2012年

@macias正如Kev所说,您将需要跟踪流量。提琴手或普通的Wireshark应该能够拾起它。
克里斯·S

Answers:


14

在Fiddler跟踪中,您似乎正在使用内置的Visual Studio Web服务器来提供页面:

Server: ASP.NET Development Server/10.0.0.0

如果这是由IIS7提供的,那么我们将看到:

Server: Microsoft-IIS/7.5

内置的Visual Studio Web服务器只能提供有限的mime类型集,并且不知道您为IIS7设置的mime类型。我不久前在Stack Overflow上写了一个类似问题的答案:

使用ASP.NET开发服务器设置MIME类型

内置服务器以以下方式提供.svg文件:

Content-Type: application/octet-stream

这可能是导致浏览器提示下载的原因。

在Visual Studio中,通过打开站点的项目属性并从垂直选项卡列表中选择“ Web”选项卡,检查您是否正在使用IIS Express:

在此处输入图片说明

如果您没有安装IIS 7.5 Express,则可以从这里获取:

http://www.microsoft.com/download/zh-CN/details.aspx?id=1038

您需要Visual Studio 2010 Service Pack 1才能充分利用:

http://support.microsoft.com/kb/983509

IIS Express支持

使用Visual Studio 2010 SP1,您可以将Internet信息服务(IIS)7.5 Express用作网站和Web应用程序项目的本地托管服务器。

注意 IIS 7.5 Express不包含在SP1中,您必须单独下载它。有关更多信息,请访问以下博客:http : //weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx

完成后,可以将.svgmime类型添加到应用程序的web.config文件中:

<configuration>
   <system.webServer>
      <staticContent>
         <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
      </staticContent>
   </system.webServer>
</configuration>

非常感谢。就我而言,情况有所不同-切换到IIS(我有ISS,而不是ISSExpress),我必须在admin模式下运行VS,在那之后,这一切-我没有在web.config中定义svg,因为我定义了它已经在IIS中。
greenoldman '02

2

如上所述,Cassini忽略了web.config中的这些设置,因此(在VS项目设置下)必须使用IIS Express /programming/5924647/setting-mime-types-using-the-asp-网络开发服务器

要获取有关如何使用管理UI或对IIS或IIS Express使用web.config来配置MIME类型的更多信息,请参阅:http: //4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4-在iis-for-a-website-or-global /http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4-to-web-config-in-iis-7中/


您是在问新问题还是在口头上?如果是前者,请问一个新问题,并提供完整的细节。如果是后者,这可能应该是一条评论-就目前的情况而言,这是一个非常差的答案(请参阅此处了解原因
voretaq7 2012年

通过更好的链接进行了修订
George Birbilis

好多了:-)
voretaq7 2012年

2

我使用了Kev的答案,方法是:

  1. Web平台安装程序安装IIS 8.0 Express
  2. 更改项目的属性以使用IIS Express并为其创建虚拟目录
  3. 添加web.config的配置→system.webServer
<staticContent>
    <remove fileExtension=".svg" />
    <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>

2

我的解决方法是在本地创建自己的httphandler,以覆盖svg的内容类型。

public class SvgHandler : IHttpHandler
{

    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/svg+xml";
        context.Response.BinaryWrite(File.ReadAllBytes(context.Request.PhysicalPath));
        context.Response.End();
    }
}

并在web.config中我添加了:

<httpHandlers>
  <add verb="*" path="*.svg" type="SvgHandler" />
</httpHandlers>

使用此解决方案,您不必使用IIS Express,只需在Visual Studio 2010中使用常规开发服务器即可。


1
发生这种事情真是太
糟糕了

1

我正在运行IIS7,并且能够通过右键单击IIS中的服务器并选择属性来解决此问题。然后,我单击MIME Types ...按钮。然后,我单击“新建”。对于扩展名,我输入.svg。对于MIME类型,我输入了image / svg + xml。然后保存所有内容,并在命令提示符下进行了iisreset。很棒。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.