web-dev-qa-db-fra.com

L'API Web .Net Core 2.2 obtient 415 le type de média non pris en charge sur un GET?

J'ai mis à niveau mon projet WebApi vers .net core 2.2 et depuis lors, tous mes contrôleurs extraient 415 types de supports non pris en charge de chaque appel GET. Ce qui est super étrange parce que 415 est généralement réservé à quelque chose de POST selon mon expérience.

Si je rétrograde à la version 2.1, le problème disparaît. J'ai posté le code ci-dessous de la configuration de mon contrôleur et de la configuration de démarrage de base.

    [Route("v1/[controller]")]
    [Produces("application/json")]
    [Consumes("application/json")]
    [Authorize]
    public class JobsController : ControllerBase
    {
        [HttpGet]
        public IActionResult GetJobSummaryByUserId([FromQuery] PagedJobRequest pagedJobRequest)
        {
            if (pagedJobRequest.UserId == Guid.Empty)
            {
                pagedJobRequest.UserId = _jwtUtility.GetIdentityId();
            }
            if (!_jwtUtility.DoesJwtIdentityIdMatch(pagedJobRequest.UserId) && !_jwtUtility.IsUserInRole("Administrator"))
            {
                return Unauthorized();
            }

            var returnObj = _jobsService.GetJobSummariesByUserId(pagedJobRequest);

            return Ok(returnObj);
        }
}

Dans Startup.cs:

 public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddCors(x => x.AddPolicy("MVRCors", y => y.AllowCredentials().AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()));
        services.AddEntityFrameworkSqlServer();
        }
   public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseSwagger();
            app.UseSwaggerUI(s =>
            {
                s.SwaggerEndpoint("/swagger/v1/swagger.json", "MVR.Api.Jobs");
            });
        }

        ConfigureExceptionHandling(app);
        app.UseMvc();
        app.UseCors("MVRCors");

        loggerFactory.AddSerilog();
    }
9
willthiswork89

C'est un problème connu avec 2.2

https://github.com/aspnet/AspNetCore/issues/4396

Il semble que ce correctif dans la version 2.2 a provoqué des requêtes GET pour honorer le [Consumes] attribut sur un contrôleur. Auparavant, en 2.1, ils ne le faisaient pas.

La solution consiste à supprimer le [Consumes] attribut du contrôleur et appliquez-le uniquement aux méthodes non -GET de votre contrôleur, ou rétrogradez et continuez à utiliser .NET Core 2.1 jusqu'à ce qu'un correctif soit publié.

Il a déjà corrigé pour la version 3.0 .NET Core. Je pense qu'ils sont toujours en train de décider s'ils vont résoudre ce problème dans une version de service 2.2.

7
Simply Ged