Come configurare IIS per SVG e test Web con Visual Studio?


14

Diciamo che ho una semplice pagina web con l'immagine svg in essa:

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

Se creo questa pagina come pagina HTML statica e la visualizzo direttamente, viene visualizzato svg. Se scrivo l'indirizzo di questo svg - viene visualizzato.

Ma quando creo questo come pagina aspx e lo lancio dinamicamente da Visual Studio ottengo alttesto. Se scrivo l'indirizzo di questo svg (da localhost, non come file locale) - il browser prova a scaricarlo invece di visualizzarlo.

Ho già definito il tipo mime in IIS (per l'intero server - "image / svg + xml") e riavviato IIS. Stesso effetto di prima.

Domanda: cosa dovrei fare di più?

Aggiornare

WireShark non funzionerà (è nella documentazione), ho provato anche RawCap, ma non riesce a tracciare la mia connessione (dispari), fortunatamente Fiddler ha funzionato:

Dal 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

Risposta dal server:

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

Per la cronaca, ecco utili domande e risposte per Fiddler: /programming/826134/how-to-display-localhost-traffic-in-fiddler-while-debugging-an-asp-net-applicati


Penso che potresti ottenere risposte migliori per questo su SO. In breve, supponendo che ASPX stia già funzionando, dovresti emettere SVG come tipo MIME dalla pagina ASPX affinché il browser creda che sia un file SVG. Probabilmente stai cercando di emettere in modo dinamico SVG dalla pagina? In tal caso, AFAIK se funziona come una singola pagina, funzionerà in una voce IMG.
TristanK,

@TristanK, aspx non emette "SVG come tipo MIME", contiene semplicemente <img src...come mostrato sopra, aspx viene "tradotto" in una pagina html completa, ma IIS invia l'intero contenuto (html e quindi svg).
Greenoldman,

Non capisco ancora cosa stai descrivendo, ma penso che questa sia una domanda di sviluppo, quindi sarebbe meglio chiederlo su StackOverflow.
TristanK,

2
Prendi una copia di Fiddler, quindi traccia le due diverse richieste. Ciò potrebbe darti alcuni indizi sul perché una richiesta diretta per l'immagine si sta comportando diversamente in ognuno di questi casi. Molto probabilmente gli indizi saranno nelle intestazioni restituite. Senza questi dati non possiamo fare altro che indovinare quali risposte sta restituendo il tuo server.
Kev,

@macias Come ha detto Kev, dovrai tracciare il traffico. Il violinista o il semplice vecchio Wireshark dovrebbero essere in grado di raccoglierlo.
Chris S,

Risposte:


14

Dalla tua traccia di Fiddler sembra che stai servendo le tue pagine usando il web server di Visual Studio incorporato:

Server: ASP.NET Development Server/10.0.0.0

Se questo fosse servito da IIS7, vedremmo:

Server: Microsoft-IIS/7.5

Il server Web incorporato di Visual Studio ha solo un set limitato di tipi MIME che può servire e non ha conoscenza dei tipi MIME impostati per IIS7. Ho scritto una risposta a un problema simile su Stack Overflow qualche tempo fa:

Impostazione dei tipi MIME mediante ASP.NET Development Server

Il server integrato offre il tuo .svgfile come:

Content-Type: application/octet-stream

Questo è probabilmente ciò che sta causando il download del browser.

In Visual Studio verifica di utilizzare IIS Express aprendo le proprietà del progetto del tuo sito e selezionando la scheda "Web" dall'elenco delle schede verticali:

inserisci qui la descrizione dell'immagine

Se non hai installato IIS 7.5 Express, puoi ottenerlo da qui:

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

È necessario Visual Studio 2010 Service Pack 1 per sfruttare appieno:

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

Supporto IIS Express

Visual Studio 2010 SP1 consente di utilizzare Internet Information Services (IIS) 7.5 Express come server di hosting locale per il sito Web e i progetti di applicazioni Web.

Nota IIS 7.5 Express non è incluso in SP1 ed è necessario scaricarlo separatamente. Per ulteriori informazioni, visitare il seguente blog: http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx

Al termine puoi aggiungere il .svgtipo mime al web.configfile dell'applicazione :

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

Grazie molto. Nel mio caso è andata in qualche modo diversamente - per passare a IIS (ho ISS, non ISSExpress) ho dovuto eseguire VS in modalità admin, dopotutto era tutto - non ho definito svg in web.config perché ho definito già in IIS.
Greenoldman,

2

Come accennato in precedenza, Cassini ignora queste impostazioni in web.config, quindi è necessario utilizzare IIS Express (nelle impostazioni del progetto VS) /programming/5924647/setting-mime-types-using-the-asp- net-sviluppo-Server

Per ulteriori informazioni su come configurare i tipi MIME utilizzando l'interfaccia utente dell'amministratore o utilizzando web.config per IIS o IIS Express, consultare: http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4- in-iis-for-a-website-or-global / e http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4-to-web-config-in-iis-7 /


Lo stai ponendo come una nuova domanda, o retoricamente? Se il primo, si prega di porre una nuova domanda con tutti i dettagli. Se quest'ultimo, questo dovrebbe probabilmente essere un commento - così com'è è una risposta molto scarsa ( vedi qui per il perché )
voretaq7

rivisto con collegamenti migliori
George Birbilis,

molto meglio :-)
voretaq7

2

Ho usato la risposta Kev, di:

  1. Installazione di IIS 8.0 Express dal programma di installazione della piattaforma Web
  2. Modifica delle proprietà del progetto per utilizzare IIS Express e creazione della directory virtuale per esso
  3. Aggiunta nella configurazione di web.config → system.webServer
<staticContent>
    <remove fileExtension=".svg" />
    <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>

2

La mia soluzione per questo era creare localmente il mio httphandler che sovrascrivesse il tipo di contenuto per 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 in web.config ho aggiunto:

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

con questa soluzione non devi usare IIS express, puoi semplicemente usare il normale server di sviluppo in Visual Studio 2010


1
È piuttosto disgustoso che questo genere di cose debba accadere ...
Jarrod Mosen,

1

Sto eseguendo IIS7 e sono stato in grado di risolvere il problema facendo clic con il pulsante destro del mouse sul server in IIS e scegliendo Proprietà. Quindi ho fatto clic sul pulsante Tipi MIME ... Ho quindi fatto clic su Nuovo. Per l'estensione ho digitato .svg. Per il Tipo MIME ho digitato image / svg + xml. Ho quindi salvato tutto e ho fatto un iisreset dal prompt dei comandi. Ha funzionato alla grande.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.