. Net Core 3 - api - XML и JSON формат выводит по запросу URL (. xml,. json) - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь выяснить, как настроить согласование содержимого, чтобы серверы приложений и xml, или json по запросу.

Я пробовал несколько вещей, которые вы можете найти в inte rnet, включая документацию Microsoft , но безрезультатно. (вы увидите это с моим закомментированным кодом). Я попытался поместить все параметры в .Add Mvc, убрав все параметры и т.д. c. Я просто не знаю, что попробовать дальше

Вот начальная часть вызова ConfigureServices

public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        //services.AddControllers().AddXmlSerializerFormatters();
        services.AddControllers().AddNewtonsoftJson();
        services.AddControllers(options =>
        {
            options.ReturnHttpNotAcceptable = true;
            options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
            options.OutputFormatters.Add(new XmlSerializerOutputFormatter());

            options.FormatterMappings.SetMediaTypeMappingForFormat(
                                         "xml", "application/xml");
        });
        //services.AddControllers(options =>
        //{
        //    options.FormatterMappings.SetMediaTypeMappingForFormat
        //        ("xml", MediaTypeHeaderValue.Parse("application/xml"));
        //}).AddXmlSerializerFormatters().AddXmlDataContractSerializerFormatters();

Вот моя попытка установить это в контроллере

[Route("api/[controller]")]
[ApiController]
[FormatFilter]
public class PulpTestsController : ControllerBase
{
    private readonly DatabaseContext _context;

    public PulpTestsController(DatabaseContext context)
    {
            _context = context;
    }

    // GET: api/PulpTests
    [HttpGet()]
    [HttpGet(".{format?}")]
    //[HttpGet(".{format?}"),FormatFilter]
    public async Task<ActionResult<IEnumerable<PulpTests>>> GetPulpTests()
    {
        return await _context.PulpTests.Include(b=>b.System).ToListAsync();
    }

1 Ответ

0 голосов
/ 08 февраля 2020

Что ж, если у кого-то возникла такая же проблема, я внес изменения в api, чтобы переопределить маршрут и принять формат:

[Route("api/[controller]")]
[ApiController]    
[FormatFilter]
public class PulpTestsController : ControllerBase
{
    private readonly DatabaseContext _context;

    public PulpTestsController(DatabaseContext context)
    {
        _context = context;
    }

    // GET: api/PulpTests
    [Route("/api/[controller].{format}")] // <- Right here
    [HttpGet]
    public async Task<ActionResult<IEnumerable<PulpTests>>> GetPulpTests()
    {
        return await _context.PulpTests.Include(b=>b.SystemEntity).ToListAsync();
    }

Я также удалил кучу плиты котла при запуске .cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        //services.AddControllers().AddXmlSerializerFormatters();
        services.AddControllers().AddNewtonsoftJson();
        services.AddControllers(options =>
        {
            options.RespectBrowserAcceptHeader = true;
            options.ReturnHttpNotAcceptable = true;                
            //options.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
            //options.InputFormatters.Add(new XmlSerializerInputFormatter(options));
            //options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
            //options.FormatterMappings.SetMediaTypeMappingForFormat(
            //                             "xml", "application/xml");
        }).AddXmlSerializerFormatters();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...