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();
}
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サービスリリースで修正するかどうかはまだ決定していると思います。