【发布时间】: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