Como configurar o IIS para testes SVG e web com o Visual Studio?

14

Digamos que eu tenha uma página da Web simples com svg image nela:

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

Se eu fizer esta página como uma página HTML estática e visualizá-la diretamente, svg será exibido. Se eu digitar o endereço desse svg, ele será exibido.

Mas quando faço isso como página .aspx e inicio dinamicamente a partir do Visual Studio, recebo alt text. Se eu digitar o endereço desse svg (do localhost, não como um arquivo local) - o navegador tenta baixá-lo em vez de exibi-lo.

Eu já defini o tipo mime no IIS (para todo o servidor - "image / svg + xml") e reiniciei o IIS. O mesmo efeito de antes.

Pergunta: o que devo fazer mais?

Atualizar

WireShark não funciona (está na documentação), eu tentei também o RawCap, mas ele não pode rastrear minha conexão (ímpar), por sorte o Fiddler trabalhou:

Do cliente:

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

Resposta do servidor:

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. ***

Para o registro, aqui está o Q & A útil para o Fiddler: link

    
por greenoldman 14.02.2012 / 11:23

6 respostas

14

No seu rastreio do Fiddler, parece que você está veiculando suas páginas usando o servidor da web do Visual Studio:

Server: ASP.NET Development Server/10.0.0.0

Se isso fosse servido pelo IIS7, veríamos:

Server: Microsoft-IIS/7.5

O servidor da web do Visual Studio interno tem apenas um conjunto limitado de tipos de mime que ele pode atender e não tem conhecimento dos tipos de mimo que você definiu para o IIS7. Eu escrevi uma resposta para um problema semelhante no Stack Overflow há algum tempo:

Setting MIME types using the ASP.NET Development Server

O servidor interno está veiculando seu arquivo .svg como:

Content-Type: application/octet-stream

Provavelmente, isso está fazendo com que o navegador solicite o download.

No Visual Studio, verifique se você está usando o IIS Express abrindo as propriedades do projeto do seu site e selecionando a guia "Web" na lista de guias verticais:

SevocênãopossuioIIS7.5Expressinstalado,podeobtê-loaqui:

http://www.microsoft.com/download/en/details.aspx?id=1038

Você precisará do Visual Studio 2010 Service Pack 1 para aproveitar ao máximo:

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

IIS Express support

Visual Studio 2010 SP1 enables you to use the Internet Information Services (IIS) 7.5 Express as the local hosting server for the website and Web Application Projects.

Note IIS 7.5 Express is not included in SP1, and you must download it separately. For more information, visit the following blog: http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx

Quando tiver feito isso, você poderá adicionar o tipo .svg mime ao arquivo web.config do seu aplicativo:

<configuration>
   <system.webServer>
      <staticContent>
         <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
      </staticContent>
   </system.webServer>
</configuration>
    
por 16.02.2012 / 13:59
2

Como mencionado acima, a Cassini ignora essas configurações no web.config, portanto, é necessário usar o IIS Express (nas configurações do projeto VS) link

Para obter mais informações sobre como configurar tipos MIME usando a interface do usuário do administrador ou usando web.config para IIS ou IIS Express, consulte: link e link

    
por 12.06.2012 / 18:18
2

Eu usei a resposta de Kev, por:

  1. Instalando o IIS 8.0 Express do Instalador da Web Platform
  2. Alterando as propriedades do projeto para usar o IIS Express e criar um diretório virtual para ele
  3. Adicionando a configuração do web.config → system.webServer
<staticContent>
    <remove fileExtension=".svg" />
    <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>
    
por 04.06.2014 / 20:47
2

Minha solução para isso foi criar meu próprio httphandler localmente, que substituiu o tipo de conteúdo para 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();
    }
}

e no web.config eu adicionei:

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

com esta solução você não precisa usar o IIS express, você pode simplesmente usar o servidor de desenvolvimento regular no visual studio 2010

    
por 15.10.2014 / 17:06
1

Estou executando o IIS7 e consegui corrigi-lo clicando com o botão direito do mouse no servidor no IIS e escolhendo propriedades. Então cliquei no botão MIME Types .... Eu cliquei em Novo. Para a extensão eu digitei .svg. Para o tipo MIME, digitei image / svg + xml. Em seguida, salvei tudo e fiz um iisreset no prompt de comando. Funcionou muito bem.

    
por 14.07.2014 / 16:27
0

Se você tiver acesso ao IIS, isso também corrigirá o problema: link

    
por 25.03.2015 / 18:13