2012-12-29 7 views
5

Prima di tutto, ti preghiamo di comprendere che non sto cercando di visualizzare JSON in IE9. Uso Fiddler tutto il tempo. Ho un uploader di terze parti chiamato Fine Uploader che si aspetta i messaggi di risposta JSON dopo il caricamento di file Ajax.API Web IE9 Dati JSON "vuoi aprire o salvare questo file"

Ora capisco che IE9 non ha un MIME per visualizzare JSON ma NON sto provando a visualizzare JSON. Sto solo restituendo una risposta JSON dopo aver caricato alcuni file e IE9 tenta di aprire la mia risposta ajax.

Poiché ho intenzione di avere tutte le mie risposte API Web formattate in JSON devo aggiungere un tipo di contenuto di risposta text/html personalizzato per ogni chiamata API per rendere la mia applicazione compatibile con IE9? Cose davvero ridicole, non riesco a capire quanto tempo sprecherò con i problemi di compatibilità di IE.

risposta

7

Sebbene la risposta di Ray funzioni, questo cambia il tipo di contenuto della risposta per tutti gli interventi di Json. Idealmente, non dovremmo influenzare il tipo di risposta per i browser che funzionano bene.

Per un modo semplice per risolvere questo problema (in particolare in MVC) vedere my answer to this question.

In breve, il codice seguente fa il trucco, e può essere avvolto in un metodo di controllo/assistente di base, se del caso:

if (!Request.AcceptTypes.Contains("application/json")) 
    return base.Json(data, "text/plain"); 
else 
    return base.Json(data); 

Mi auguro che aiuta qualcun altro!

+0

Sì, questa è una soluzione più elegante, grazie. –

0

Ti aspetti che le persone consumino la tua API utilizzando IE9? Di solito, le persone con i browser non possono comunque leggere JSON. Ti suggerisco di testare la tua API usando qualcosa come Fiddler2.

Il motivo per cui IE9 richiede di scaricare il file è perché non ha un gestore MIME per visualizzarlo. I browser sono progettati per visualizzare solo determinati tipi di mime, come text/html, text/xml, image/png, image/jpeg, ecc. Di solito è necessario un plug-in speciale per visualizzare tipi personalizzati come application/pdf. JSON, con il suo tipo application/json mime non è diverso.

Se davvero ti infastidisce così tanto, leggi this e this.

+1

Bene che è una cosa, non sto cercando di leggere/visualizzare la JSON, torno JSON a una terza uploader file di parti chiamato Belle Uploader. Richiede messaggi formattati JSON per visualizzare un caricamento riuscito ({"successo" = vero}). Quindi il consumatore è Fine Uploader, alias alcuni client Javascript e IE9 sta aprendo il messaggio JSON pensato per Fine Uploader. A proposito, questa è una chiamata Ajax. Quindi al caricamento iniziale il tipo mime è text/html –

1

Il problema è il tipo di contenuto della risposta: deve essere "text/plain", NOT "application/json".

+0

L'API Web di Microsoft sta impostando il tipo di contenuto su application/json. Sto ritornando JSON, perché dovrei impostare il tipo di contenuto in text/plain? Per placare IE9? –

+3

Per placare IE, sì. –

+0

Ho cambiato il mio tipo di contenuto in text/html, sono sicuro che anche text/plain funziona. Provo a votare la tua risposta, ma la mia reputazione non è abbastanza alta per farlo, grazie per il tuo aiuto. –

3

In WebAPI, è possibile impostare la risposta globale nelle configurazioni attivate in Global.asax. In questo modo tutti i tuoi browser considerano le tue risposte WebAP come veri JSON.

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // stuff... 

     config.Formatters.Add(new JsonMediaTypeFormatter()); 
     config.Formatters.JsonFormatter.SupportedMediaTypes 
      .Add(new MediaTypeHeaderValue("application/json")); 

     // Most important... +++++++++++++ 
     config.Formatters.JsonFormatter.SupportedMediaTypes 
      .Add(new MediaTypeHeaderValue("text/html")); 
     // ------------------------------- 

     config.EnsureInitialized(); 
    } 
} 
Problemi correlati