В 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/json
→ 406
) без нарушения возможности отправлять application/problem+json
ответов на ошибки?