Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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# web api方法调用中的参数为null_C#_Jquery_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

C# web api方法调用中的参数为null

C# web api方法调用中的参数为null,c#,jquery,asp.net-mvc,asp.net-web-api,C#,Jquery,Asp.net Mvc,Asp.net Web Api,在我的方法上编写一个web api项目和一个参数(json数组)将进入api null。我正在使用的jquery如下所示: <script> $(document).ready(function () { $('#btnSubmit').click(function () { var jsRequestAction = { appId: 'appName', custId:

在我的方法上编写一个web api项目和一个参数(json数组)将进入api null。我正在使用的jquery如下所示:

<script>
    $(document).ready(function () {
        $('#btnSubmit').click(function () {
            var jsRequestAction = {
                appId: 'appName',
                custId: 'custId',
                oprId: 'oprId',
                businessProcess: 'Requisition',
                action: 'Approve',
                actionKeys: [
                    'blah blah 1',
                    'blah blah 2',
                    'blah blah 3'
                ]                    
            };

            $.ajax({
                type: "POST",
                content: "json",
                url: "http://localhost/api/appName/custId/oprId",                    
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify({ requestAction: jsRequestAction })
            });
        });
    });
</script>
public IList<ResponseAction> ActionCounter(string appName, string custCode, string custUserName, RequestAction requestAction)
    {
        IList<ResponseAction> actionResponseList = new List<ResponseAction>();
        var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        conn.Open();

        try
        {
            foreach (string s in requestAction.actionKeys)
            {
                var command = new SqlCommand
                {
                    CommandText = "Sql statement",
                    Connection = conn
                };
                command.ExecuteNonQuery();

                var reply = new ResponseAction();
                reply.responseActionKey = s;
                reply.responseMessage = "Success";
                actionResponseList.Add(reply);
            }
            return actionResponseList;
        }
        finally
        {
            conn.Close();
            conn.Dispose();
        }
    }
public IList<ResponseAction> ActionCounter(RequestAction requestAction)
{
    // Do stuff
}

当我调试时,我会逐步执行该方法,当我到达foreach循环时,我会得到一个空对象引用。在“我的局部变量”部分中,requestAction的所有属性都为空。在阅读了几篇相关文章之后,我尝试在对象前面加上[FromBody]标记,但没有任何效果。任何帮助都将不胜感激。

您需要确保对象服务器端与您在客户端创建的对象相匹配,以便将请求直接序列化到对象中

因此,您的操作方法如下所示:

<script>
    $(document).ready(function () {
        $('#btnSubmit').click(function () {
            var jsRequestAction = {
                appId: 'appName',
                custId: 'custId',
                oprId: 'oprId',
                businessProcess: 'Requisition',
                action: 'Approve',
                actionKeys: [
                    'blah blah 1',
                    'blah blah 2',
                    'blah blah 3'
                ]                    
            };

            $.ajax({
                type: "POST",
                content: "json",
                url: "http://localhost/api/appName/custId/oprId",                    
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify({ requestAction: jsRequestAction })
            });
        });
    });
</script>
public IList<ResponseAction> ActionCounter(string appName, string custCode, string custUserName, RequestAction requestAction)
    {
        IList<ResponseAction> actionResponseList = new List<ResponseAction>();
        var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
        conn.Open();

        try
        {
            foreach (string s in requestAction.actionKeys)
            {
                var command = new SqlCommand
                {
                    CommandText = "Sql statement",
                    Connection = conn
                };
                command.ExecuteNonQuery();

                var reply = new ResponseAction();
                reply.responseActionKey = s;
                reply.responseMessage = "Success";
                actionResponseList.Add(reply);
            }
            return actionResponseList;
        }
        finally
        {
            conn.Close();
            conn.Dispose();
        }
    }
public IList<ResponseAction> ActionCounter(RequestAction requestAction)
{
    // Do stuff
}
公共IList操作计数器(请求操作请求操作)
{
//做事
}

其中RequestAction应该与您正在创建的javascript对象匹配。

我找到了问题的答案。这是一个改变的问题:

$.ajax({
            type: "POST",
            content: "json",
            url: "http://localhost/api/appName/custId/oprId",                    
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ requestAction: jsRequestAction })
        });
为此:

$.ajax({
            type: "POST",
            content: "json",
            url: "http://localhost/api/appName/custId/oprId",                    
            data: jsRequestAction
        });

否则,数据将不会绑定到控制器中的我的模型,所有内容都将被清空。

从web api方法中取出除requestAction之外的所有参数,我仍然会得到null。我应该提到的是,我将这个方法从我以前构建的一个WCF rest服务转移过来,这个服务可以正常工作,但是我在WebAPI中遇到了这个问题。