代码之家  ›  专栏  ›  技术社区  ›  MC9000

如何强制dotnetcore2.1webapi输出Json格式?我需要什么图书馆?

  •  0
  • MC9000  · 技术社区  · 7 年前

    我直截了当地说。我正在将ASP.NETWeb服务转换为DotNetCore2.1服务。我的问题很简单。如何从字符串(带有get动词)获取json输出? 我是新手,但几乎所有的文档和建议都不适用于DotNetCore。

    显然,以下方法行不通:

    [HttpGet]
    public string Get()
    {
        return "{\"country_code\":\"US\",\"country_name\":\"United States\",\"region_name\":\"California\",\"city_name\":\"Los Angeles\",\"latitude\":\"34.052230\",\"longitude\":\" - 118.243680\",\"zip_code\":\"90001\",\"time_zone\":\" - 08:00\"}";
    }
    

    [HttpGet]
    public JsonResult Get()
    {
        return Json("{\"country_code\":\"US\",\"country_name\":\"United States\",\"region_name\":\"California\",\"city_name\":\"Los Angeles\",\"latitude\":\"34.052230\",\"longitude\":\" - 118.243680\",\"zip_code\":\"90001\",\"time_zone\":\" - 08:00\"}", "application/json"); 
    }
    

    任何人,如果有人能帮忙的话。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Nkosi    7 年前

    如果还没有强类型模型,可以构建一个匿名类型并从控制器返回该类型

    public class MyController: Controller {
    
        [HttpGet]
        public IActionResult Get() {
            var model = new {
                country_code = "US",
                country_name = "United States",
                region_name = "California",
                city_name = "Los Angeles",
                latitude = 34.052230,
                longitude = -118.243680,
                zip_code = 90001,
                time_zone = "- 08:00"
            };
            return Ok(model); //200 OK with content
        }    
    }
    

    在更复杂的场景中,您可以从数据源获取对象。

    不需要库,除非另外配置,否则框架开箱即用将默认对象序列化为JSON。

    ContemntResult 对象。将字符串和内容类型传递给它。

    [HttpGet]
    public IActionResult Get() {
        string json = "{\"country_code\":\"US\",\"country_name\":\"United States\",\"region_name\":\"California\",\"city_name\":\"Los Angeles\",\"latitude\":\"34.052230\",\"longitude\":\" - 118.243680\",\"zip_code\":\"90001\",\"time_zone\":\" - 08:00\"}";
        return Content(json, new MediaTypeHeaderValue("application/json"));
    }
    

    参考 Format response data in ASP.NET Core Web API

    如果要限制特定操作的响应格式,可以应用 [Produces] 过滤器。这个 [生产] 筛选器指定响应 特定操作(或控制器)的格式。像大多数过滤器一样,这个 可以应用于操作、控制器或全局范围。

    [Produces("application/json")]
    public class AuthorsController
    

    这个 [生产] AuthorsController 为应用程序和提供的客户端配置了格式化程序 请求不同的可用格式的接受头。

        2
  •  1
  •   Vova Bilyachat    7 年前

    确保您的客户端正在发送标题“Content Type”:“application/json”。

    [HttpGet]
    public Address Get()
    {
        return new Address{ CountryCode = "US"} ; 
    }