Как отключить JSON OK ответов (но не ошибок) в ASP. NET Core 3.1 - PullRequest
0 голосов
/ 14 февраля 2020

В ASP. NET Core 3.1 API мне нужно быть строгим при согласовании контента. Если действия выполнены в порядке, ответ будет иметь тип содержимого application/pdf, но при наличии ошибок (например, 400, 406 и т. Д. c) тип содержимого будет application/problem+json.

Соответствующая часть моего класса запуска:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc(options =>
        {
            options.ReturnHttpNotAcceptable = true;
            options.RespectBrowserAcceptHeader = true;
            options.OutputFormatters.Insert(0, new PdfOutputFormatter());
        });

В моем контроллере:

namespace MyApplication
{
    [ApiController]
    [Consumes("multipart/form-data")]
    public abstract class PdfController : ControllerBase
    {

Запросы с Accept: application/json и Accept: text/json возвращают 200 OK, но ожидается 406 Not Accepted.

Я попытался удалить выходной форматер JSON с помощью:

options.OutputFormatters.RemoveType(typeof(SystemTextJsonOutputFormatter));

Но при этом возникают все ошибки (например, 400 Bad Request с application/problem+json тип содержимого) возвращает 406 Not Accepted, поскольку для JSON ответов нет выходного форматера.

Как удалить возможность отправлять JSON ответов (ie Accept: application/json406) без нарушения возможности отправлять application/problem+json ответов на ошибки?

...