从.net核心1.1升级到2.0改变了[Produces(" application / json")]行为

时间:2017-08-23 01:59:00

标签: c# asp.net-core .net-core asp.net-core-webapi

我已将项目从.net核心1.1升级到2.0,除了返回Json文本字符串的控制器操作外,一切似乎都正常。他们看起来像

[HttpGet]
[Produces("application/json")]
public IActionResult Get(string name)
{
    var jsonStr = service.GetJsonStringFromDB();

    return Ok(jsonStr);
}

我们将Jb对象存储在Db中作为文本。在旧项目中,我们的角度服务会将此视为Json数据并且我们将获得一个对象,在新项目中我们的Angular服务将其视为字符串并且我们得到一个字符串。客户端没有任何改变。

1 个答案:

答案 0 :(得分:2)

这实际上是正确的行为。

Ok是围绕OkObjectResult的辅助方法(实际上,从ObjectResult继承的所有结果都会尝试将其反序列化为已配置的类型,具体取决于注册的序列化程序和响应类型客户端请求等),序列化输入。

如果要返回原始字符串,请改用Content

[HttpGet]
[Produces("application/json")]
public IActionResult Get(string name)
{
    var jsonStr = service.GetJsonStringFromDB();

    return Content(jsonStr);
    // Alternatively, pass the type here 
    //return Content(jsonStr, "application/json");
}