.net core .net Core 3.0预览版2-[406:不可接受]

.net core .net Core 3.0预览版2-[406:不可接受],.net-core,.net-core-3.0,.net Core,.net Core 3.0,我基于Microsoft文档,使用Microsoft 2.2构建了一个Web API。 一切正常 更新到.net Core 3.0预览版2后,所有端点都将返回[406:不可接受] 缺少了一些东西,但到目前为止,我无法理解缺少了什么。以下代码与.net core 2.2上的代码相同 Program.cs public class Program { public static void Main(string[] args) { CreateWebHostBuild

我基于Microsoft文档,使用Microsoft 2.2构建了一个Web API。 一切正常

更新到.net Core 3.0预览版2后,所有端点都将返回[406:不可接受]

缺少了一些东西,但到目前为止,我无法理解缺少了什么。以下代码与.net core 2.2上的代码相同

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
        //.ConfigureKestrel((context, options) => { });
    }
}
public class Startup
{

    public void ConfigureServices(IServiceCollection services)
    {
        // Dependency Injection - Services
        services.AddSingleton<IXXXService, XXXService>();

        services.AddMvc();

        services.AddCors(options =>
        {
            options.AddPolicy("AllowAll",
                builder => builder.WithOrigins("*").AllowAnyHeader().AllowAnyMethod());
        });

        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
            c.EnableAnnotations();
        });
    }


    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();
        app.UseCors("AllowAll");

        app.UseSwagger();
        app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API"); });
    }
}
[ApiController]
[Route("api/xxx")]
public class XXXController : BaseController
{
    private readonly IXXXService _service;

    public XXXController(IXXXService service)
    {
        _service = service;
    }

    [HttpGet]
    [Produces("application/json", Type = typeof(PagedDto<XXX>))]
    [SwaggerOperation(
        Summary = "Gets all the XXX",
        Description = "Requires admin privileges",
        OperationId = "GetAllXXX",
        Tags = new[] {"XXX"}
    )]
    public IActionResult GetAllXXX([FromQuery] PagingDto pagging)
    {
        return Ok(_service.GetAllXXX(pagging));
    }
}
公共类程序
{
公共静态void Main(字符串[]args)
{
CreateWebHostBuilder(args.Build().Run();
}
公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]args)
{
返回WebHost.CreateDefaultBuilder(args)
.UseStartup();
//.ConfigureKestrel((上下文,选项)=>{});
}
}
Startup.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
        //.ConfigureKestrel((context, options) => { });
    }
}
public class Startup
{

    public void ConfigureServices(IServiceCollection services)
    {
        // Dependency Injection - Services
        services.AddSingleton<IXXXService, XXXService>();

        services.AddMvc();

        services.AddCors(options =>
        {
            options.AddPolicy("AllowAll",
                builder => builder.WithOrigins("*").AllowAnyHeader().AllowAnyMethod());
        });

        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
            c.EnableAnnotations();
        });
    }


    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();
        app.UseCors("AllowAll");

        app.UseSwagger();
        app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API"); });
    }
}
[ApiController]
[Route("api/xxx")]
public class XXXController : BaseController
{
    private readonly IXXXService _service;

    public XXXController(IXXXService service)
    {
        _service = service;
    }

    [HttpGet]
    [Produces("application/json", Type = typeof(PagedDto<XXX>))]
    [SwaggerOperation(
        Summary = "Gets all the XXX",
        Description = "Requires admin privileges",
        OperationId = "GetAllXXX",
        Tags = new[] {"XXX"}
    )]
    public IActionResult GetAllXXX([FromQuery] PagingDto pagging)
    {
        return Ok(_service.GetAllXXX(pagging));
    }
}
公共类启动
{
public void配置服务(IServiceCollection服务)
{
//依赖注入-服务
services.AddSingleton();
services.AddMvc();
services.AddCors(选项=>
{
options.AddPolicy(“AllowAll”,
builder=>builder.WithOrigins(“*”).AllowAnyHeader().AllowAnyMethod());
});
services.AddSwaggerGen(c=>
{
c、 SwaggerDoc(“v1”,新的openapinfo{Title=“myapi”,Version=“v1”});
c、 EnableAnnotations();
});
}
公共无效配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
app.UseMvc();
附录UseCors(“AllowAll”);
app.UseSwagger();
app.UseSwaggerUI(c=>{c.SwaggerEndpoint(“/swagger/v1/swagger.json”,“我的API”);});
}
}
XXXController.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }
    public static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
        //.ConfigureKestrel((context, options) => { });
    }
}
public class Startup
{

    public void ConfigureServices(IServiceCollection services)
    {
        // Dependency Injection - Services
        services.AddSingleton<IXXXService, XXXService>();

        services.AddMvc();

        services.AddCors(options =>
        {
            options.AddPolicy("AllowAll",
                builder => builder.WithOrigins("*").AllowAnyHeader().AllowAnyMethod());
        });

        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
            c.EnableAnnotations();
        });
    }


    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();
        app.UseCors("AllowAll");

        app.UseSwagger();
        app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API"); });
    }
}
[ApiController]
[Route("api/xxx")]
public class XXXController : BaseController
{
    private readonly IXXXService _service;

    public XXXController(IXXXService service)
    {
        _service = service;
    }

    [HttpGet]
    [Produces("application/json", Type = typeof(PagedDto<XXX>))]
    [SwaggerOperation(
        Summary = "Gets all the XXX",
        Description = "Requires admin privileges",
        OperationId = "GetAllXXX",
        Tags = new[] {"XXX"}
    )]
    public IActionResult GetAllXXX([FromQuery] PagingDto pagging)
    {
        return Ok(_service.GetAllXXX(pagging));
    }
}
[ApiController]
[路线(“api/xxx”)]
公共类XXX控制器:BaseController
{
专用只读IXXXService\u服务;
公共XXX控制器(IXXXService服务)
{
_服务=服务;
}
[HttpGet]
[products(“application/json”,Type=typeof(PagedDto))]
[招摇过市](
Summary=“获取所有XXX”,
Description=“需要管理员权限”,
OperationId=“GetAllXXX”,
Tags=new[]{“XXX”}
)]
public IActionResult GetAllXXX([FromQuery]分页数据到分页)
{
返回Ok(_service.GetAllXXX(分页));
}
}

我在Microsoft github上发布了这个问题,他们的回答如下:

You have to install the nuget package Microsoft.AspNetCore.Mvc.NewtonsoftJson
In your startup.cs file, add the JsonFormatter like this :
services.AddMvc().AddNewtonsoftJson().SetCompatibilityVersion(CompatibilityVersion.Version\u 3\u 0)


有了这个变化,一切都按预期进行。

这可能是aspnet core 3中最大的变化-JSON.NET现在不再捆绑。