Angularjs отправляет нулевые значения в API, почему? - PullRequest
0 голосов
/ 11 марта 2019

Я отправляю идентификатор и список из angular в C # web API, но он получает нулевое значение при отладке метода, не зная причины.

angular service

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

new angular

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");

new angular service

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

когда я делаю отладку, объект r из класса ролей правильно получает ключ персонала из angular, но списокСчетчик Vacmkey на 0 ???

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

вы должны передать значения параметра для метода post в свойстве params.

var data = {staffid: staffid, vacs:vacs};
    $http({
      url: "/AssignUserToDepartmentapi/api/assignuser/deletevacs",
      method: "POST",
      params: data
    })

или попробуйте это ниже:

var data = {staffid: staffid, vacs:vacs};
    $http.post("/AssignUserToDepartmentapi/api/assignuser/deletevacs", data ).then(function (data, status, headers, config) { 
    alert("success"); 
},function (data, status, headers, config) { 
    alert("error"); 
});

Код API должен быть похож на

[HttpPost]
public HttpResponseMessage deletevacs([FromUri]int staffid, [FromUri] int[] vacs)
{

...

}
0 голосов
/ 11 марта 2019

Решение 1:

Используйте атрибут [FromUri] в параметре метода HttpPost, поскольку вы получаете значение из строки запроса в 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] перед параметром объекта. Затем в вашем вызове httpPost поместите параметр в тело запроса вместо URL.

Google по поводу использования [FromBody] в webapi.

Решение 3:

Вместо использования HttpPost, почему бы не использовать метод HttpDelete. В вашей проблеме ясно, что вы намерены удалить записи. В веб-API вы можете использовать атрибут HttpDelete вместо HttpPost. Чтобы сделать это, измените свой атрибут на HttpDelete из HttpPost, и в своем параметре вы можете просто передать только [FromUri] int StaffId и внутри своего API, все записи вакуума, связанные с StaffId, вы можете программно удалить в БД. При вызове API используйте метод конечной точки $ http.delete.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...