无法使用[FromBody]代码

时间:2016-08-12 23:01:16

标签: c# serialization asp.net-web-api deserialization uwp

我有一个api端点我试图点击使用[FromBody]标签和参数行中的对象,如下所示:

[HttpPost]
[Route("update")]
public IHttpActionResult MyWebApiMethod([FromBody] MyObject objectValue)
{

我一直在编写一个与这个网络API进行通信的UWP应用程序,并且我之前已成功点击端点;然而,无论出于何种原因,我最近都无法再达到这个特定的终点。 api的控制器初始化,当我启用跟踪时,我可以看到控制器已设法关联正确的端点,并且似乎推断出我发送的对象的数据模型与api的数据模型匹配期待,但是当它由[FromBody]标签进行反序列化时,它只是永远不会落地,并且不会做任何事情。最终我的应用程序因其请求而超时。

在我做过的许多测试中,我尝试解决导致此问题的原因。我发现了2个值得注意的事情,但我无法弄清楚如何解决根本问题。

首先,这是一个临时的解决方法。如果我改变端点以接收JObject并使用

var newValue = JsonConvert.DeserializeObject<MyObject>(JsonConvert.Serialize(objectValue);

然后,端点会被击中,我的newValue将被正确反序列化。

其次,考虑到客户端上的数据模型与我们的api使用的数据模型不同,我将数据模型转换为nuget(我有问题使这个nuget与Universal Windows 10应用程序兼容由于一些参考问题,所以我做了一个普通的类库)然后将nuget安装到一个相当简单的骨骼控制台应用程序中,并对相同的端点进行相同的调用,并且它达到了终点,而不必诉诸于使用JObject在方法参数中。

因此,在某种程度上,当数据包来自通用应用程序时发生的反序列化过程与来自通用控制台应用程序的数据包不同。不幸的是,在进入Method之前[FromBody]接管时,我无法弄清楚如何与这个反序列化过程联系起来。

解决此问题的任何帮助都会很棒。

0 个答案:

没有答案