Web Api 中返回JSON的正確做法

2021-06-26 23:36:57 字數 2050 閱讀 7337

在使用web api

的時候,有時候只想返回

json

;實現這一功能有多種方法,本文提供兩種方式,一種傳統的,一種作者認為是正確的方法。

json in web api – 

只支援json

最普遍的做法是:首先清除其他所有的

formatters

,然後只保留

jsonmediatypeformatter。

有了httpconfiguration

的例項,你將會很簡單的清除所有

formatters

,然後重新新增

jsonmediatypeformatter。

實現**如下:

configuration.formatters.clear();

configuration.formatters.add(

new jsonmediatypeformatter());

這種方式雖然可以實現功能,但是所有的conent negotiation還是會發生,這就會產生以下額外的開銷了。因為,你已經知道要返回的結果了,也只想返回

json

,其他的

content negotiation

都不需要了。

下面的方法可以很好的解決這個問題。

json in web api – 

最好的方法是使用自定義的只返回json result的

content negotiation

代替web api

中預設的

content negotiation。

conneg通過實現icontentnegotiator的

negotiator

方法實現擴充套件。

negotiator

方法返回

contentnegotiationresult

(它包裝了你選擇的

headers

和formatter)。

下面的方法通過傳遞乙個jsonmediatypeformatter

給自定義的

conneg negotiator

,讓它一直返回

的content-type

以及jsonmediatypeformatter

。這種方法避免了每次請求都要重新建立一次

formatter。

**如下:

}接下來,你需要在httpconfiguration例項上註冊你的新的實現機制:

var jsonformatter = new

jsonmediatypeformatter();

//optional: set serializer settings here

config.services.replace(typeof(icontentnegotiator), new jsoncontentnegotiator(jsonformatter));

通過替換預設的defaultcontentnegotiator,我們使用我們自定義的

jsoncontentnegotiator

,它只支援

json

,而且可以馬上返回。

如果你想更深入的了解content negotiation

的知識,你可以檢視作者的這篇文章。 總結

通過使用自定義的jsoncontentnegotiator

替換系統預設的

defaultcontentnegotiator

,很好的實現

web api

只返回json

的功能,而且沒有額外的開銷。

作者對content negotiation

的講解:

WebAPI 返回JSON資料

public static class webapiconfig defaults new 在全域性設定中,使用自定義的只返回json result。只讓api介面中替換xml,返回json。這種方法的效能是最高的!json.net 利用contractresolver解決命名不一致問題 解決問題 ...

WebApi返回Json格式

public class 但有個不好的地方,如果返回的結果是string型別,如aaa,返回的json就會變成 aaa namespace testwebapi endregion region 2 webapi 返回json,推薦做法效能最高 config.services.replace typ...

美化WebApi,使其統一返回Json格式

部落格部分 來自其他博主,暫時找不到你的博文連線,如果您覺得我的 中引入了您的 或者文章,可在下方把您的部落格文章寫在下面,謝謝!webapi有兩種返回資料格式,一種是xml,一種是json,在webapi中,你可以選擇你自己喜歡的返回資料格式,在這裡,我基本都是返回的是json,基本上,使用web...