2017-02-13 15 views
4

Используя .Net Core v1.1 для создания сервиса OData, он отлично работает при подключении к браузеру, хотя при подключении к Excel 2016 он не работает, как базовый OData канал. Исключение составляетИсключение подключения Excel к. Net Core v1.1 OData v4 Добавить как минимум один тип медиа?

'InvalidOperationException' Нет типов носителей найдены в 'Microsoft.AspNetCore.OData.Formatter.ODataOutputFormatter.SupportedMediaTypes'. Добавьте по крайней мере один тип носителя в список поддерживаемых типов носителей.

Оба Excel и браузер подключиться к 'http://localhost:52315/odata' с методом = 'GET'

HeaderAccept из браузера:

"text/html, application/xhtml+xml, image/jxr, */*" 

HeaderAccept из Эксел: (ПРИМЕЧАНИЕ: Я добавил новый линии после ';' для удобочитаемости)

"application/json; 
odata.metadata=minimal; 
q=1.0,application/json; 
odata=minimalmetadata; 
q=0.9,application/atomsvc+xml; 
q=0.8,application/atom+xml; 
q=0.8,application/xml; 
q=0.7,text/plain; 
q=0.7" 

Любое понимание того, как можно добавить тип носителя и какие можно добавить. Кажется, не могут найти образцы или предыдущие вопросы, касающиеся этого.

ответ

1

Это, по-видимому, известная проблема (cf https://github.com/OData/WebApi/issues/597). Кажется маловероятным, что он будет решен в ветке vNext, но, к счастью, я нашел обходное решение.

В вашем Startup.cs, только после регистрации OData, добавьте этот фрагмент:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(); 
    services.AddOData(); 
    services.AddMvcCore(options => 
    { 
     // loop on each OData formatter to find the one without a supported media type 
     foreach (var outputFormatter in options.OutputFormatters.OfType<ODataOutputFormatter>().Where(_ => _.SupportedMediaTypes.Count == 0)) 
     { 
      // to comply with the media type specifications, I'm using the prs prefix, for personal usage 
      outputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/prs.dummy-odata")); 
     } 
    }); 
} 

Найдет все выходные форматтеры, которые не декларируют поддерживаемый тип носителя, а также добавить фиктивный один.

Ссылки: