MediaTypeFormatter, применяемый для неподдерживаемых типов мультимедиа - PullRequest
0 голосов
/ 29 марта 2019

Я использую Owin / WebAPI. У меня есть определенный форматтер CSV, и я хочу, чтобы этот форматер использовался только в том случае, если указана ожидаемая полезная нагрузка и тип ресурса явно поддерживается в коде. Например, Accept: текст / CSV Поэтому для стандартного контента «application / json» я не ожидал вызова CanWriteType (), поскольку у меня есть специальная обработка для возврата запроса 400 Bad, когда запрос поддерживается. Однако я вижу, что CanWriteType () вызывается для всех запросов, включая стандартные типы носителей application / json. Это ожидается? Может ли CustomCSVMediaTypeFormatter заблокировать его в любом случае, чтобы он вызывался только при запросе формата csv?

    public class CustomCSVMediaTypeFormatter : MediaTypeFormatter
        {
            Func<Type, Type> _getUnderlyingDataType = (type) => type.GetGenericArguments().FirstOrDefault()?.GetGenericArguments().FirstOrDefault();
            readonly IEnumerable<Type> _supportedResponsePayloadTypes = new List<Type> { typeof(Foo) };

            public CustomCSVMediaTypeFormatter()
            {
                SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/csv"));
            }


            public override bool CanWriteType(Type type)
            {
                if (type == typeof(HttpError))
                    return false;
                if(_supportedResponsePayloadTypes.Contains(_getUnderlyingDataType(type)))
                    return true;
              throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotImplemented));
            }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...