【发布时间】:2016-10-30 18:15:01
【问题描述】:
我正在尝试在我的应用程序中调用 Web 服务 API,并且我正在传递一个参数,但由于某种原因,它没有反序列化 JSON。相反,它只是将我的 JSON 作为字符串传递。以下是 API 代码:
[Route("api/v1/images/GetMemberImageUrl", Name = "ApiImagesGetMemberImageUrl")]
[HttpPost]
public IHttpActionResult GetMemberImageUrl([FromBody]object memberId)
{
// memberId is a string and it contains "{memberId: 18}"
// Do stuff
// ...
}
请注意,我最初拥有[FromBody]int memberId。我收到了一个错误的请求,所以我将其更改为object,这样我就可以看到传入的确切内容。传入的是一个包含"{memberId: 18}" 的字符串。
这是我对 API 的 AJAX 调用代码:
$.ajax({
type: 'POST',
cache: false,
timeout: 30000,
data: JSON.stringify({memberId: @Infrastructure.Member.GetAuthenticatedMembersId()}),
url: '@Url.HttpRouteUrl("ApiImagesGetMemberImageUrl", null)',
contentType: "application/json",
success: function(retval) {
// Do more stuff
}
});
知道为什么模型绑定器不反序列化我的 JSON 吗?
【问题讨论】:
-
嘿,您是否尝试过创建一个模型以将
object更改为YourModel(与您的论点具有相同的属性)?通常我是这样做的。 -
@VagnerLucas - 我可能会这样做并且它可能会起作用,但是,我的理解是 Web Api 2 的模型绑定器应该足够聪明,知道如何将我的参数绑定到传入的JSON。
-
@VagnerLucas - 确实有效。我刚试过。但是,我仍然认为模型绑定器应该为我做这件事,而不必每次都创建一个新的模型类。
-
@Icemanind diud 你尝试只写数据:{memberId: @Infrastructure.Member.GetAuthenticatedMembersId()},(不带字符串化)并添加 dataType : "json" 参数?
-
是的。我遇到了同样的麻烦,但我认为只要你将一个对象作为参数传递,就没有办法绑定,而且它得到的正是你传递的内容(一个 json 对象)。我使用了
JavaScriptSerializer中的Deserialize方法,这是一种方法。
标签: c# jquery json asp.net-mvc asp.net-web-api2