C# WebApi动态对象未绑定
我正在尝试将C# WebApi动态对象未绑定,c#,jquery,asp.net-web-api,dynamicobject,C#,Jquery,Asp.net Web Api,Dynamicobject,我正在尝试将动态对象发送到ApiController。在return null行上设置断点,我看到参数总是null AJAX调用: $(':checkbox').click(function (event) { var values = $('input[type="checkbox"]:checked').map(function () { return $(this).val(); }).toArray(); var product = {
动态
对象
发送到ApiController
。在return null
行上设置断点,我看到参数总是null
AJAX
调用:
$(':checkbox').click(function (event) {
var values = $('input[type="checkbox"]:checked').map(function () {
return $(this).val();
}).toArray();
var product = {
Name: $('#name2').val(),
Price: $('#price2').val(),
Category: $('#category2').val()
};
$.ajax({
type: 'GET',
url: '/api/filter',
data: JSON.stringify( product ),
contentType: 'application/json',
success: function (data) {
//alert("succeeded");
},
error: function (err, data) {
alert("Error " + err.responseText);
}
});
});
控制器
:
[HttpGet]
public IEnumerable<Products> GetAllProducts(dynamic parameters)
{
return null;
}
[HttpGet]
公共IEnumerable GetAllProducts(动态参数)
{
返回null;
}
你知道我做错了什么吗?编辑:-将原始答案从“获取”改为“发布”
假设您发布的代码在FilterController中,GetAll方法通常不接受参数,而是用于获取所有产品。如果你想在那里填充你的动态,你应该把它改成这样的帖子
$.ajax({
type: 'POST',
url: '/api/filter/GetAllProducts,
data: JSON.stringify( product ),
contentType: 'application/json',
success: function (data) {
//alert("succeeded");
},
error: function (err, data) {
alert("Error " + err.responseText);
}
});
然后使用HttpPost属性装饰控制器
[HttpPost]
public IEnumerable<Products> GetAllProducts(dynamic parameters)
{
return null;
}
[HttpPost]
公共IEnumerable GetAllProducts(动态参数)
{
返回null;
}
我认为JSON中应该有这样一种说法,即您正在传递的对象名为参数
,这样自动的东西才能按照您的期望工作。也许JSON.stringify({parameters:product})
会给您带来一些东西。@TimS。我也试过了,它仍然是空的。在下面的评论中回答你的另一个问题时,GET
请求没有假定有正文,只有URL参数,因此没有尝试对正文进行绑定。@TrueBlueAussie,“不假定有正文”是什么意思?我也试过你的选项,它仍然是空的。关于GetAll,您是对的,但这只是一个测试,用于在动态对象中获取一些数据。。。真奇怪,这篇文章确实有用。但是为什么GET调用不起作用呢?这段代码与我们使用的代码几乎相同。在ajax调用之前放置一个断点,并检查JSON.stringify(产品),如果您得到的是null POST。我的猜测可能与WebAPI中的默认模型绑定器有关,以及GET在url中具有参数与POST将其作为正文的一部分之间的差异。。如果您想将is作为GET保存,您应该考虑简单地返回IQueryable并使用oData$filter$where等操作符,并将其作为oData端点。您是否碰巧有关于这些oData$filter$where等的链接(指向教程或其他内容)?