2012-12-29 25 views
5

首先,請理解我不想在IE9中查看JSON。我一直使用Fiddler。我有一個名爲Fine Uploader的第三方上傳器,它希望在成功上傳Ajax文件時能夠看到JSON響應消息。Web API IE9 JSON數據「你想打開還是保存這個文件」

現在我明白,IE9沒有MIME來顯示JSON,但我不想顯示JSON。我只是在ajax上傳一些文件並且IE9嘗試打開我的ajax響應之後返回一個JSON響應。

因爲我打算讓我的所有Web API響應格式爲JSON,是否必須爲每個api調用添加自定義文本/ html響應內容類型以使我的應用程序與IE9兼容?認真荒謬的東西,我無法瞭解我浪費了多少時間處理IE兼容性問題。

回答

7

雖然Ray的答案有效,但會更改所有Json響應的響應內容類型。理想情況下,我們不應該影響可以很好地播放的瀏覽器的響應類型。

要解決此問題的簡單方法(特別是在MVC中),請參閱my answer to this question

總之,下面的代碼是卓有成效的,並且如果適用,可以包裝成一個基本的控制器/ helper方法:

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

我希望幫助別人!

+0

是的,這確實是一個更優雅的解決方案,謝謝。 –

0

你期望人們使用IE9來使用你的API嗎?通常,瀏覽器的用戶無論如何都無法閱讀JSON。我建議你使用Fiddler2之類的東西測試你的API。

IE9提示您下載該文件的原因是因爲它沒有MIME處理程序來顯示它。瀏覽器僅用於顯示某些MIME類型,如text/html,text/xml,image/png,image/jpeg等。通常需要一個特殊的插件來顯示自定義類型,如application/pdf。 JSON與其應用程序/ json mime類型沒有什麼不同。

如果真的有那麼多問題,請閱讀thisthis

+1

那麼這是事情,我不想讀取/查看JSON,我將JSON返回給名爲Fine Uploader的第三方文件上傳器。它需要JSON格式的消息才能顯示成功上傳({「success」= true})。所以消費者是Fine Uploader,也就是某些客戶端Javascript和IE9正在打開適用於Fine Uploader的JSON消息。順便說一句,這是一個Ajax調用。因此,在初始加載時,MIME類型爲text/html –

1

問題是你的迴應的內容類型:它必須是「text/plain」,而不是「application/json」。

+0

微軟的web API將內容類型設置爲application/json。我正在返回json,爲什麼要將content-type設置爲text/plain?安撫IE9? –

+3

安撫IE,是的。 –

+0

我將我的內容類型更改爲text/html,我相信text/plain也可以。我儘量選出你的答案,但是我的名聲還不夠高,謝謝你的幫助。 –

3

在WebAPI中,您可以在Global.asax中觸發的配置中設置全局響應。這樣,所有瀏覽器都會將您的WebAPI響應視爲真正的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(); 
    } 
} 
相關問題