. NET Порядок форматеров Core Output - PullRequest
1 голос
/ 07 августа 2020

У меня есть 3 средства форматирования вывода, одно из которых является моим настраиваемым средством форматирования вывода, которое должно запускаться, когда SupportedMediaType имеет значение Excel (Content-type: application/vnd.ms-excel).

      services.AddControllers(options =>
      {
            options.OutputFormatters.Add(new ExcelOutputFormatter());; // Excel stylesheet XML
      }).AddNewtonsoftJson().AddXmlSerializerFormatters();

Однако, если мой заголовок Accept: */*, приложение отправляет меня в ExcelOutputFormatter. Могу ли я использовать средство форматирования вывода JSON вместо средства форматирования Excel по умолчанию?

1 Ответ

0 голосов
/ 07 августа 2020

Вам нужно будет повторить c подход, используемый AddNewtonsoftJson и AddXmlSerializerFormatters, чтобы вы могли связать его после этих двух; это относительно просто:

services.AddControllers(options => {})
    .AddNewtonsoftJson().AddXmlSerializerFormatters().AddExcelOutputFormatter();
// ...
public static IMvcBuilder AddExcelOutputFormatter(this IMvcBuilder builder)
{
    builder.Services.TryAddEnumerable(
        ServiceDescriptor.Transient<IConfigureOptions<MvcOptions>, ExcelOutputFormatterSetup>());            
    return builder;
}
class ExcelOutputFormatterSetup : IConfigureOptions<MvcOptions>
{
    void IConfigureOptions<MvcOptions>.Configure(MvcOptions options)
    {
        options.OutputFormatters.Add(new ExcelOutputFormatter());
    }
}

Это должно привести к правильной синхронизации, чтобы вы оказались в правильном положении в цепочке.

В качестве примечания: вы также можете добавить на options.FormatterMappings.

...