Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net Core 2.2 Web API在GET上获取415个不受支持的媒体类型?_C#_Asp.net Web Api_.net Core - Fatal编程技术网

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

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")] [

我已经将我的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);
        }
}
在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上设置内容类型将导致框架预期正文为非空,并导致另一个错误。