1
如果一個省略了一個Asp.Net的Web API的請求Accept
頭球衝頂值,服務器將返回(415) Unsupported Media Type
默認「接受」的Asp.Net的Web API
我正在尋找一種方式來迫使API當請求的頭部不包含Accept
值時,假定默認返回類型(在我的情況下爲application/json
)。
經過大量的閱讀和搜索後,我不確定這甚至有可能嗎?
如果一個省略了一個Asp.Net的Web API的請求Accept
頭球衝頂值,服務器將返回(415) Unsupported Media Type
默認「接受」的Asp.Net的Web API
我正在尋找一種方式來迫使API當請求的頭部不包含Accept
值時,假定默認返回類型(在我的情況下爲application/json
)。
經過大量的閱讀和搜索後,我不確定這甚至有可能嗎?
這是內容談判者的責任,選擇正確的格式化程序來序列化響應對象。但如果找不到合適的格式化程序,WebApi框架默認會獲得JsonFormatter
。
所以這是奇怪的行爲。無論如何,如果請求沒有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());