2012-12-01 100 views
13

是否有可能從ASP.NET Web API而不是XML返回默認的json?默認情況下使用ASP.NET Web API返回json

+1

這種打破了保持web api不可知的模式。如果您在ajax請求的標頭中發送「Accept:application/json」,則WebAPI將在Json中響應。我可以看到你的ajax請求嗎? – gideon

+0

謝謝隊友。這就是我需要的。我剛剛使用web api和api url路徑看到了一個來自pluralsight的視頻教程,並且它在瀏覽器中直接響應了json。所以沒有Ajax請求。它只是網站/api/control –

+0

你甚至不需要Accept頭。如果您在GET請求中沒有Accept標頭,則應該從WebAPI返回JSON。 –

回答

18

這是默認情況下完成的。 JsonMediaTypeFormatter已註冊爲第一個MediaTypeFormatter,如果客戶端未以特定格式請求響應,則ASP.NET Web API管道會以application/json格式向您提供響應。

如果你想要的是僅支持application/json,刪除所有其他格式化,只留JsonMediaTypeFormatter

public static void Configure(HttpConfiguration config) { 

    var jqueryFormatter = config.Formatters.FirstOrDefault(x => x.GetType() == typeof(JQueryMvcFormUrlEncodedFormatter)); 
    config.Formatters.Remove(config.Formatters.XmlFormatter); 
    config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter); 
    config.Formatters.Remove(jqueryFormatter); 
} 
+0

這對我很有用。謝謝 –

8

@ tugberk的解決方案並沒有真正完成更改默認格式化的目標。它只是讓JSON 只有選項。如果你想JSON默認值,還支持所有其他類型的,你可以做到以下幾點:

public static void Configure(HttpConfiguration config) { 
    // move the JSON formatter to the front of the line 
    var jsonFormatter = config.Formatters.JsonFormatter; 
    config.Formatters.Remove(jsonFormatter); 
    config.Formatters.Insert(0, jsonFormatter); 
} 

注:JSON是默認格式爲Web API 2.0。

+0

適合我。好多了。 – Phil