【问题标题】:Why am I not receiving deserialized data in my WebAPI?为什么我的 WebAPI 中没有收到反序列化的数据?
【发布时间】:2013-02-18 21:17:20
【问题描述】:

我有一个简单的 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、空值等)。我觉得控制器没有正确反序列化对象,但我有点不知道如何解决这个问题。有什么想法吗?

【问题讨论】:

  • 在这种情况下使用的一个好工具是 Fiddler(免费下载)。它将自己设置为网络代理,您可以看到每个请求和服务器响应。在这种情况下,您可以更轻松地查看客户端应用程序传输的确切数据。
  • 这可能不是您正在寻找的方法,但我通常坚持使用string 参数和Json.Decode()Json.Encode() 进行反序列化。我只是觉得它更干净。另外,我建议从您的 WebApi 控制器返回一个 HttpResonseMessage,以便您可以控制标头(正确的响应代码等)
  • @DiskJunky - 在这种情况下我不能使用 Fiddler,因为它目前在同一个盒子上。
  • @jermny 啊,那么我认为 wtfsven 的方法是尝试诊断问题的最佳方法。尝试(反)序列化到/从字符串,以确保事情的一面工作

标签: c# asp.net json serialization


【解决方案1】:

解决方案是因为我的控制器不是 ApiController。一旦我将控制器更改为从 ApiController 而不是 Controller 继承,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-27
    • 2011-05-18
    • 1970-01-01
    • 2018-07-04
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    相关资源
    最近更新 更多