web-dev-qa-db-ja.com

.Net Core 2.2 Web APIはGETで415 Unsupported Media typeを取得しますか?

WebApiプロジェクトを.netコア2.2にアップグレードしました。それ以降、すべてのコントローラーは、GET呼び出しごとに415 Unsupported Mediaタイプを取得しています。私の経験では、415は一般的にPOSTのために予約されているものだからです。

2.1にダウングレードすると、問題はなくなります。コントローラーのセットアップと基本的なスタートアップ構成のコードを以下に掲載しました。

    [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);
        }
}

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

2.2の既知の問題です

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

このバグ修正 2.2では、GET要求がコントローラーの[Consumes]属性を尊重するようになったようです。以前は、2.1ではそうではありませんでした。

回避策は、コントローラーから[Consumes]属性を削除し、コントローラーのGETメソッド以外にのみ適用するか、修正がリリースされるまでダウングレードして.NET Core 2.1を使用し続けることです。

3.0 .NET Coreリリースでは 既に修正済み になっています。 2.2サービスリリースで修正するかどうかはまだ決定していると思います。

7
Simply Ged