Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WebApi动态对象未绑定_C#_Jquery_Asp.net Web Api_Dynamicobject - Fatal编程技术网

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等的链接(指向教程或其他内容)?