【问题标题】:Parameter in web api method call is coming in nullweb api方法调用中的参数为null
【发布时间】:2013-12-09 20:53:55
【问题描述】:

在我的方法上编写一个 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>

我的 web api 方法如下所示:

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();
        }
    }

RequestAction 模型:

public class RequestAction
{

    public string appId { get; set; }
    public string custId { get; set; }
    public string oprId { get; set; }
    public string businessProcess { get; set; }
    public string action { get; set; }
    public string[] actionKeys { get; set; }
    public string actionKey { get; set; }
}

当我调试时,我会逐步执行该方法,当我进入 foreach 循环时,我会得到一个空对象引用。查看我的本地人部分,我的 requestAction 的所有属性都是空的。在阅读了一些相关文章后,我尝试使用 [FromBody] 标签为对象添加前缀,但无济于事。任何帮助将不胜感激。

【问题讨论】:

    标签: c# jquery asp.net-mvc asp.net-web-api


    【解决方案1】:

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

    $.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
            });
    

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

    【讨论】:

      【解决方案2】:

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

      所以您的操作方法将如下所示:

      public IList<ResponseAction> ActionCounter(RequestAction requestAction)
      {
          // Do stuff
      }
      

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

      【讨论】:

      • 从 web api 方法中取出除 requestAction 之外的所有参数,我仍然得到空值。我应该提一下,我正在将这个方法从我之前构建的 WCF 休息服务转移过来,但我在 web api 中遇到了问题。
      猜你喜欢
      • 1970-01-01
      • 2013-02-06
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      相关资源
      最近更新 更多