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