ProducesAttribute не фильтрует запросы в веб-API ASP.NET Core перед выполнением кода.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ProducesAttribute не фильтрует запросы в веб-API ASP.NET Core перед выполнением кода.

Сообщение Anonymous »

Проблема
У меня есть веб-API ASP.NET Core, который может генерировать ответы XML и JSON. Для одного из моих контроллеров я разрешаю создавать как XML, так и JSON. Однако для всех остальных конечных точек я хочу создавать только JSON. В настоящее время я получаю код состояния HTTP 406, когда запрос отправляется с помощью Accept: application/xml. Однако код, принадлежащий действию, выполняется, потребляя ненужные ресурсы.
Настройка
Мне удалось настроить это довольно легко с помощью Шаблон веб-API ASP.NET Core в Visual Studio (.NET 8). В Program.cs у меня есть:

Код: Выделить всё

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers(options =>
{
// This line enables returning 406 errors for unsupported media types.
options.ReturnHttpNotAcceptable = true;
})
// This line enables XML support for the APIs.
.AddXmlSerializerFormatters();

var app = builder.Build();

// Configure the HTTP request pipeline.

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapControllers();

app.Run();

Затем в автоматически создаваемом WeatherForecastController я добавил тег Produces, например:

Код: Выделить всё

namespace TestApi.Controllers
{
[ApiController]
[Route("[controller]")]
[Produces(MediaTypeNames.Application.Json)]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};

private readonly ILogger _logger;

public WeatherForecastController(ILogger logger)
{
_logger = logger;
}

[HttpGet]
public IEnumerable Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
}
Теперь, когда я делаю такой запрос:

Код: Выделить всё

GET {{TestApi_HostAddress}}/weatherforecast/
Accept: application/xml
Я получаю сообщение об ошибке, но установка точки останова в методе Get() показывает, что код выполняется до того, как ASP.NET Core обнаружит отсутствие доступного средства форматирования.< /p>
Есть ли способ гарантировать, что ASP.NET на этапе согласования содержимого узнает, что можно получить код 406 вместо предварительного запуска кода в моем API?
Документация
https://learn.microsoft.com/en-us/aspne ... a-format-2

Подробнее здесь: https://stackoverflow.com/questions/792 ... ore-code-i
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ProducesAttribute не фильтрует запросы в веб-API ASP.NET Core перед выполнением кода.
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • ProducesAttribute не фильтрует запросы в веб-API ASP.NET Core перед выполнением кода.
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между веб-приложением ASP.NET Core (MVC) и веб-приложением ASP.NET (.NET framework) [дубликат]
    Anonymous » » в форуме C#
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»