1. 程式人生 > >Web Api 中返回JSON 轉成駝峰給前端的機制

Web Api 中返回JSON 轉成駝峰給前端的機制

在使用Web Api的時候,有時候只想返回JSON

最好的方法是使用自定義的只返回Json Result的content negotiation代替Web Api中預設的content negotiation。

Conneg通過實現IContentNegotiator的Negotiator方法實現擴充套件。Negotiator方法返回ContentNegotiationResult(它包裝了你選擇的headers和formatter)。

下面的方法通過傳遞一個JsonMediaTypeFormatter給自定義的conneg negotiator,讓它一直返回applicaton/json 的content-type以及JsonMediaTypeFormatter。這種方法避免了每次請求都要重新建立一次formatter。

程式碼如下:in webApi config new class

複製程式碼

public class JsonContentNegotiator : IContentNegotiator
{
    private readonly JsonMediaTypeFormatter _jsonFormatter;

    public JsonContentNegotiator(JsonMediaTypeFormatter formatter) 
    {
        _jsonFormatter = formatter;    
    }

    public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
    {
        var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
        return result;
    }
}

複製程式碼

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

   public class WebApiConfig
    {
        public static void Register(HttpConfiguration config, IAppBuilder appBuilder)
        {
           //////////////////////////////

            //Return json with lower case first letter of property names
            var jsonFormatter = new JsonMediaTypeFormatter();
            config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));

            appBuilder.UseWebApi(config);
        }
    }
通過替換預設的DefaultContentNegotiator,我們使用我們自定義的JsonContentNegotiator,它只支援Json,而且可以馬上返回。

如果你想更深入的瞭解Content Negotiation的知識,你可以檢視作者的這篇文章

總結

通過使用自定義的JsonContentNegotiator替換系統預設的DefaultContentNegotiator,很好的實現Web Api只返回Json的功能,而且沒有額外的開銷。