【发布时间】:2019-05-19 04:08:32
【问题描述】:
我已将我的 WebApi 项目升级到 .net core 2.2,从那时起,我的所有控制器都从每个 GET 调用中提取 415 Unsupported Media type。这非常奇怪,因为根据我的经验,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();
}
【问题讨论】:
-
查看“Chrome 开发人员工具 > 网络”(或等效项)。问:您的 GET 请求中的 HTTP“接受”标头是什么?问:响应中的 HTTP“Content-Type”是什么?
-
我正在使用邮递员,在 2.2 之前我从不需要指定任何内容,但让我试试
-
我们只想看看“谁倒下了”——客户端或控制器。查看发送/接收 HTTP 标头将帮助我们确定这一点。 PS:如果您使用的是 Swagger,为什么还要打扰 Postman?只是好奇...
-
很好的安全定义不会采用不记名令牌,这是升级到最新版本带来的另一个有趣的变化。我们的控制器完全获得 JWT 授权
-
拖动 - 前进一步,后退两步 :( 无论如何 - 我真的很好奇您在“接受”请求和“内容类型”响应标头中看到的内容。请随时通知我们!
标签: c# asp.net-web-api .net-core