如何在AspNetCore 3.0预览中以JSON形式返回引用类型?

时间:2019-02-13 03:43:37

标签: c# asp.net-core

我试图返回我的一个控制器中的学生列表,但我总是收到406 Not Acceptable。我有第二个测试控制器,它仅返回 Ok(new string [] {“ value1”,“ value2”}); ,并使用正确的JSON进行响应。

示例控制器:

[Produces("application/json")]
[Route("api/[controller]")]
[ApiController]
public class StudentController : Controller {
{
    ...
    [HttpGet]
    public async Task<IActionResult> GetAll()
    {
        IEnumerable<Student> students = await _repository.GetAllStudentsAsync();
        return Ok(students);
    }
}

学生列表包含一个条目,并且看起来通常不错。

该项目使用AspNetCore App 3.0 previewAspNetCore NewtonsoftJson 3.0 preview,因为从主AspNetCore程序包中删除了JSON生成。

我添加了

services.AddMvc()
    .AddNewtonsoftJson();

在我的Startup.cs中。还有其他东西吗?

更新1:

如果我用 return Json(students); 返回学生,则它返回的json结果不带406,但不适用于Ok(...)。

1 个答案:

答案 0 :(得分:0)

我已经用[Produces(“ application / xml”)]覆盖了其中一个子控制器中的[Produces(“ application / json”)]。因为我没有提供任何xml Formatter,所以得到了406。

最初我尝试了xml / json几次,因为我缺少AspNetCore NewtonsoftJson 3.0 preview中的services.AddMvc() .AddNewtonsoftJson(); 。之所以需要它,是因为Newtonsoft.Json已从3.0版(source)的Asp Core中删除。