2013-02-18 69 views
0

我有一个简单的WebAPI应用程序。在我的控制,我有:为什么我没有收到我的WebAPI中的反序列化数据?

[HttpPost] 
public ActionResult DoSomeWork(string stringParam, DTOObject dto) 
{ 
    // Some work gets done in here 
} 

我有一个控制台应用程序这样做:

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri(_context); 
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

var response = client.PostAsJsonAsync("ControllerPath/DoSomeWork", new object[]{someString, dtoObject}).Result; 

我没有收到任何错误。当我的断点在控制器内部命中时,它显示字符串进入NULL,并且DTO即将完全填充,但具有默认值(1/1/1900s,空值等)。我觉得控制器没有正确地反序列化这个对象,但我对如何解决这个问题感到不知所措。有什么想法吗?

+0

在这种情况下使用的好工具是提琴手(免费下载)。它将自己设置为网络代理,您可以看到每个请求和服务器响应。在这种情况下,您可以更轻松地查看客户端应用程序传输的确切数据。 – DiskJunky 2013-02-18 21:25:16

+1

这可能不是您要查找的方法,但我通常坚持使用'string'参数和'Json.Decode()'和'Json.Encode()'来进行反序列化。我只是觉得它更干净。 此外,我建议从WebApi控制器返回一个HttpResonseMessage,以便您可以控制标题(正确的响应代码等)。 – 2013-02-18 21:28:38

+0

@DiskJunky - 在这种情况下,我无法使用Fiddler,因为它现在位于同一个框中。 – jermny 2013-02-18 21:32:38

回答

1

解决方案是因为我的控制器不是ApiController。一旦我将控制器更改为从ApiController而不是Controller继承,那么所有工作都没有问题。

相关问题