Angularjs向API发送空值,为什么?

时间:2019-03-11 10:12:29

标签: c# angularjs rest api

我正在从angular向C#Web API发送一个id和一个列表,但是在调试该方法时不知道原因,它将被null接收。

角度服务

this.deletevacs = function (staffid, vacs) {
    return $http.post("/AssignUserToDepartmentapi/api/assignuser/deletevacs?staffid=" + staffid + '&vacs=' + JSON.stringify(vacs))
}

角度js

var result = DevExpress.ui.dialog.confirm("Are you sure want to delete vacations assigned employees ?", "Confirm changes");
        result.done(function (dialogResult) {
            if (dialogResult) {

                var promisePost = Assignments.deletevacs($scope.SelectedEmp1.staffkey, $scope.oldvacs);
                promisePost.then(function (pl) {
                    toastr.success("Successfully deleted");

C#

[HttpPost]
    public HttpResponseMessage deletevacs(int staffid,int[] vacs)
    {
        try
        {
            obj.ExecNonQuery(string.Format("delete from HR_AssRole_Dep where staff_key={0} and Role=7 and Current_Flag=1 and VacMKey ={1}"
                           , staffid
                           , vacs));


        }
        catch (Exception ex)
        {


        }
        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
        return response;
    }

任何帮助,谢谢!

新C#

[HttpPost]
    public HttpResponseMessage deletevacs([FromBody] role r)
    {

                    obj.ExecNonQuery(string.Format("delete from HR_AssRole_Dep where staff_key={0} and Role=7 and Current_Flag=1 and VacMKey ={1}"
                              ,r.Staff_Key
                              , r.VacMKey));





        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
        return response;
    }

课程

 public class role
{
    //public int Ass_Dep_Key { get; set; }
    public int Dep_Key { get; set; }
    public int Staff_Key { get; set; }
    public int Role { get; set; }
    public List<int> VacMKey { get; set; }
    public short SelfApprov { get; set; }
}

新角度

var deletevacssss = { Staff_Key: $scope.SelectedEmp1.staffkey, VacMKey: $scope.selectedvacs };

        var result = DevExpress.ui.dialog.confirm("Are you sure want to delete vacations assigned employees ?", "Confirm changes");
        result.done(function (dialogResult) {
            if (dialogResult) {



                var promisePost = Assignments.deletevacs(deletevacssss);
                promisePost.then(function (pl) {
                    toastr.success("Successfully deleted");

新的角度服务

this.deletevacs = function (deletes) {
return $http.post("/AssignUserToDepartmentapi/api/assignuser/deletevacs", deletes)
}

当我进行调试时,角色类中的r对象正确地从角度获取了职员键,但是vacmkey的列表计数为0 ???

1 个答案:

答案 0 :(得分:0)

解决方案1:

在HttpPost方法参数中使用[FromUri]属性,因为要从Url中的查询字符串获取值。

尝试一下:

[HttpPost]
public HttpResponseMessage deletevacs([FromUri]int staffid, [FromUri] int[] vacs)
{
    try
    {
    obj.ExecNonQuery(string.Format("delete from HR_AssRole_Dep where staff_key={0} and Role=7 and Current_Flag=1 and VacMKey ={1}"
               , staffid
               , vacs));
    }
    catch (Exception ex)
    {
    }
    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
    return response;
}

解决方案2: 创建一个包含staffId和vacs属性的对象,并将其分配给该参数。将[FromBody]属性添加到object参数之前。然后在您的httpPost调用中,将参数放在请求的正文中,而不是Url中。

Google关于在webapi中使用[FromBody]

解决方案3:

为什么不使用HttpDelete方法而不是使用HttpPost。很明显,您的问题是您打算删除记录。在Web API中,可以使用HttpDelete属性代替HttpPost。为此,请将属性从HttpPost更改为HttpDelete,然后在参数中仅传递[FromUri] int StaffId,并在API内传递与StaffId相关的所有vacs记录,然后可以在数据库中以编程方式删除。调用API时,请改用$ http.delete端点方法。