Я использую 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));
}
}