1. ホーム
  2. asp.net-mvc

[解決済み] ASP.NET Web APIが常にJSONを返すように強制するには?

2022-11-25 06:51:15

質問

ASP.NET Web APIはデフォルトでコンテント・ネゴシエーションを行います - XMLまたはJSON、あるいは Accept ヘッダに基づいて XML または JSON または他のタイプを返します。私はこれを必要としませんが、常にJSONを返すようにWeb APIに指示する方法(属性か何か)はありますか?

どのように解決するのですか?

ASP.NET Web API で JSON のみをサポートする-。 正しい方法

IContentNegotiatorをJsonContentNegotiatorに置き換える。

var jsonFormatter = new JsonMediaTypeFormatter();
//optional: set serializer settings here
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));

JsonContentNegotiatorの実装です。

public class JsonContentNegotiator : IContentNegotiator
{
    private readonly JsonMediaTypeFormatter _jsonFormatter;

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

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