【问题标题】:Pass JSON nested object to Post() method - C# WebAPI将 JSON 嵌套对象传递给 Post() 方法 - C# WebAPI
【发布时间】:2017-08-08 15:54:42
【问题描述】:

我有一个 C# WebAPI(我是 Web API 的新手),它工作正常,因为我可以使用 HttpClient 从 Postman 和另一个 C# 程序执行 GET 和 POST 请求。

POST 方法正在“工作”,因为我在其中设置了一个断点以检查其中的代码是否在我发送 POST 请求时被触发。

“另一个 C# 程序”负责从数据库读取一些数据,将其序列化(使用 JSON.Net)并将其发送到 Web API。

在 Web API 中,我想使用 JSON 序列化对象(其中包括嵌套对象)来重建我在序列化和发送之前拥有的相同对象。用于创建此对象的每个类都存在于 webAPI 程序中。

我认为我只需要接收 JSON 字符串,然后将其反序列化为我的对象,但我无法获取此字符串,而是将“null”作为 post 参数。

我的代码:

WebAPI 配置

public static class SHPC_APIConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "ShPcAPI",
            routeTemplate: "api/{controller}/{id}",
            defaults: new {id = RouteParameter.Optional}
        );

        // Configure JSON formatter
        var jsonFormatter = config.Formatters.JsonFormatter;
        jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    }
}

控制器

public class DataController : ApiController
{
    public string Get()
    {
        return "Hello world!";
    }

    public HttpResponseMessage Post([FromBody] string value)
    {
        var data = JsonConvert.DeserializeObject<Data>(value);
        Console.WriteLine(value != string.Empty ? "OK" : "KO");
        return new HttpResponseMessage(HttpStatusCode.OK);
    }
}

执行 GET 请求有效,我得到了我期望的答案。无论我从 Postman 或我的其他 C# 程序中请求什么。

但是,当我尝试执行 POST 请求时,无论我是从 Postman 还是从其他 C# 程序请求,请求的参数值始终为 null。

【问题讨论】:

  • 只要使用正确的类型作为参数即可。 JSON 反序列化应该作为框架的一部分发生。此外,如果可能,请使用 WebApi 2,使用属性方法定义路由比在配置中注册它们要好得多。
  • @DarrenYoung 当您说正确的类型时,您是在谈论我想将 JSON 反序列化为的“数据”类型吗?如果是,我已经尝试将 Data 作为 Post() 方法的参数而不是字符串,但它设置了一个具有所有默认/空值的 Data 对象...

标签: c# json asp.net-web-api


【解决方案1】:

在您的 WebApiConfig 文件中进入 App_Start 尝试将其放入 Register 函数中:

var settings = 
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;

这将序列化 json 中的所有响应。

【讨论】:

  • 非常感谢您完美运行!你知道为什么我在 Register 函数中的 jsonFormatter var 不起作用吗?
  • 这是因为它可能试图将 json 返回到 XML 响应中
  • 好的,非常感谢您的回答我被困了好几个小时。
猜你喜欢
  • 2016-04-01
  • 2014-05-07
  • 1970-01-01
  • 2023-03-09
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多