C# .Net Core 2.2 Web API在GET上获取415个不受支持的媒体类型?
我已经将我的WebApi项目升级到.net core 2.2,从那时起,我的所有控制器都从每个GET调用中提取415种不受支持的媒体类型。这是非常奇怪的,因为在我的经验中,415通常是保留给POST的 如果我降级到2.1,问题就会消失。我已经在下面发布了我的控制器设置代码和基本启动配置C# .Net Core 2.2 Web API在GET上获取415个不受支持的媒体类型?,c#,asp.net-web-api,.net-core,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")] [
[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中的一个已知问题 在2.2中,似乎导致任何
GET
请求遵守控制器上的[Consumes]
属性。以前,在2.1中,他们没有这样做
解决方法是从控制器中删除[Consumes]
属性,并仅将其应用于控制器中的非GET
方法,或者降级并继续使用.NET Core 2.1,直到它们发布修复程序
它为3.0.NET核心版本提供了支持。我认为他们仍在决定是否在2.2服务版本中修复它。将postman中的内容类型设置为:
Content-Type: application/json
尝试将控制器中的
[FromQuery]
替换为[FromForm]
。查看“Chrome开发者工具>网络”(或同等工具)。问:GET请求中的HTTP“Accept”头是什么?问:响应中的HTTP“内容类型”是什么?我使用的是postman,在2.2版本之前,我从来都不需要指定任何内容类型,但让我试一下,我们只想看看“谁摔倒了”——客户端或控制器。查看发送/接收HTTP头将帮助我们确定这一点。附言:如果你在招摇过市,为什么还要麻烦邮递员呢?只是好奇……好吧,大摇大摆的安全定义并没有使用承载令牌,这是升级到最新版本后的另一个有趣的变化。我们的控制器完全是JWT授权的DDRAG-向前一步,向后两步:(无论如何-我真的很好奇你在“接受”请求和“内容类型”响应标题中看到了什么。请随时通知我们!@willthiswork89:Boy,我很高兴我仍然使用2.1;)我仍然很好奇你的“接受”标题是什么(我想象“应用程序/json”)以及相应的“内容类型”响应头。如果有机会,请发布此信息。在get上设置内容类型将导致框架预期正文为非空,并导致另一个错误。