2017-07-19 79 views
1

如果一個省略了一個Asp.Net的Web API的請求Accept頭球衝頂值,服務器將返回(415) Unsupported Media Type默認「接受」的Asp.Net的Web API

我正在尋找一種方式來迫使API當請求的頭部不包含Accept值時,假定默認返回類型(在我的情況下爲application/json)。

經過大量的閱讀和搜索後,我不確定這甚至有可能嗎?

回答

0

這是內容談判者的責任,選擇正確的格式化程序來序列化響應對象。但如果找不到合適的格式化程序,WebApi框架默認會獲得JsonFormatter

If there are still no matches, the content negotiator simply picks the first formatter that can serialize the type.

所以這是奇怪的行爲。無論如何,如果請求沒有Accept標頭,您可以設置自定義內容協商者以選擇明確的JsonFormatter

public class JsonContentNegotiator : DefaultContentNegotiator 
{ 
    protected override MediaTypeFormatterMatch MatchAcceptHeader(IEnumerable<MediaTypeWithQualityHeaderValue> sortedAcceptValues, MediaTypeFormatter formatter) 
    { 
     var defaultMatch = base.MatchAcceptHeader(sortedAcceptValues, formatter); 

     if (defaultMatch == null) 
     { 
      //Check to find json formatter 
      var jsonMediaType = formatter.SupportedMediaTypes.FirstOrDefault(h => h.MediaType == "application/json"); 
      if (jsonMediaType != null) 
      { 
       return new MediaTypeFormatterMatch(formatter, jsonMediaType, 1.0, MediaTypeFormatterMatchRanking.MatchOnRequestAcceptHeaderLiteral); 
      } 
     } 

     return defaultMatch; 
    } 
} 

並替換HttpConfiguration對象

config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator());