Как отправить post-запрос через Angular в ASP.net веб — API

#angularjs #asp.net-mvc-4 #asp.net-web-api2

#angularjs #asp.net-mvc-4 #asp.net-web-api2

Вопрос:

Я новичок как в angular, так и в ASP.NET веб-API. в angular я получаю значения из формы и пытаюсь передать их на сервер через post-запрос, это код для angular.

 app.controller('AddTrnController',['$scope', 'CategoriesService','$http', function($scope, CategoriesService, $http){
    $scope.categories =[{}];
    $scope.AddTrn = {};
    function init(){
            CategoriesService.getCategories("1")
            .success(function(data){
                $scope.categories = data;
            })
            .error(function(data, status, headers){alert(status);});
        }
    init();

    $scope.change= function(option){
        $scope.AddTrn.TrnID = option.CatID;
        $scope.AddTrn.TrnAccount = 1;
    };


    $scope.UpdateTrans=function(){
        alert("21312");
        $http({method:"post",
            url:'http://localhost:18678/api/Transaction',
            params:"data:$scope.AddTrn"}
            ).success(function(){alert("succeeded");
        }).error(function(){alert("faild");});
    };

}]); 
 

И ее код для веб-API.

 public HttpResponseMessage PostTransaction(String transaction)
        {
            if (ModelState.IsValid)
            {
                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, transaction);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = transaction}));
                return response;
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
        }
 

Я всегда получаю неудачный ответ от angler, и когда я устанавливаю точку останова в API, она не срабатывает.

Ответ №1:

Используемая вами опция params добавляет элементы в строку запроса, для записи, которую вы, вероятно, захотите использовать вместо параметра data, попробуйте изменить код на этот:

 $scope.UpdateTrans=function(){
        alert("21312");
        $http({method:"post",
                url:'http://localhost:18678/api/Transaction',
                data:$scope.AddTrn
              }
            ).success(function(){alert("succeeded");
        }).error(function(){alert("faild");});
    };
 

Комментарии:

1. Я пробую оба из них и получаю тот же результат

2. @user2918388 можете ли вы использовать инструменты разработчика в своем браузере, перейти на вкладку сеть и вставить ответ, который вы получаете от запроса? Если вы скажете мне, какой браузер вы используете, я могу рассказать вам, как туда добраться

3. Нажмите «f12», чтобы открыть панель инструментов разработчика, а затем перейдите на вкладку «Сеть» (должна находиться между вкладками «Элементы» и «Источники»), а затем отправьте запрос в api. Как только вы нажмете на запрос к api, должна появиться вкладка «Ответ», на которой будет информация, которая поможет

4. {«Сообщение»:»Произошла ошибка.»,»ExceptionMessage»: «Значение не может быть нулевым. rnPпараметр name: сущность»,»ExceptionType»:»Система. Исключение ArgumentNullException»

5. я уверен, что отправляемый мной объект содержит данные, поскольку я могу его предупредить