.Net Core 2.2 Web API在GET上获取415不支持的媒体类型?

wil*_*k89 9 c# asp.net-web-api .net-core

我已经将WebApi项目升级到.net core 2.2,从那时起,我的所有控制器都从每个GET调用中提取415不支持的媒体类型。这非常奇怪,因为根据我的经验,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);
        }
}
Run Code Online (Sandbox Code Playgroud)

在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();
    }
Run Code Online (Sandbox Code Playgroud)

Sim*_*Ged 7

这是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服务版本中对其进行修复。