【问题标题】:Change Web Api 2 Post method to accept modified body更改 Web Api 2 Post 方法以接受修改后的正文
【发布时间】:2016-09-21 17:57:10
【问题描述】:

目前我有一个 API 正在接收如下对象类型。

public HttpResponseMessage Post(Job job) {}

当接收到与Job 类型匹配的直接(或部分)对象时,一切都会按预期工作。问题是我们正在修改 JSON 对象以在正文中包含更多信息,这会阻止序列化程序知道如何处理这个问题。 我们的新要求如下。

{  
   "httpHeaders":{  
   },
   "payload":{  
    }
}

我们收到的“旧”对象现在位于“有效负载”中。我是否需要重写一个方法,也许是 Media Formatter

谢谢

【问题讨论】:

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


    【解决方案1】:

    创建一个类型,其中包含您的 Job 类型作为名为 Payload 的属性以及另一个名为 HttpHeaders 的属性,其中包含预期的模型结构。我不知道您为什么要在有效负载正文中发送 Http 标头。

    模型绑定将尝试将请求正文的结构与预期模型的结构相匹配。在这种情况下,您将从期望类型 Job 变为接受包含 Job 的类型。因此,您将创建一个像这样的超类型:

    public class InputModel {
        public Job Payload {get;set;}
        public HeaderType HttpHeaders {get;set;}
    }
    

    然后,ASP.NET 模型绑定将相应地填充对象。

    【讨论】:

    • 我认为是这种情况,所以我必须手动将 Payload 映射到我的 Job 模型,或者我现在可以在方法中使用反序列化器吗?
    • 如果负载对象与您的 Job 模型匹配,那么您需要做的就是将属性命名为 Payload 并将其设为 Job 类型。如果负载对象与 Job 模型不匹配,则需要提供序列化信息,以便在模型绑定期间发生映射。
    • 完美。非常感谢。顺便说一句,这是通过消息队列传递的,这就是奇怪格式的原因。正在针对远程 API 调用进行修改。
    猜你喜欢
    • 2015-07-22
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    相关资源
    最近更新 更多