Я получаю веб-сервис «Get» вместо веб-сервиса «POST»

0

Я использовал этот пост Jquery Ajax Posting json для webservice для отправки данных на сервер через веб-службу "POST", но она была получена как "Получить" в разделе "Сеть" в браузере, вот что я получаю:

Изображение 174551

это мой код для веб-службы (ASP.net):

// Insert Student
        [Route("api/Students/ajout")]
        [System.Web.Http.ActionName("Create")]
        public async Task<HttpResponseMessage> Post(Student value)
        {

            try
            {

                if (ModelState.IsValid)
                {
                    _StudentService.Insert(value);
                    var response = Request.CreateResponse<Student>(HttpStatusCode.Created, value);
                    await _unitOfWorkAsync.SaveChangesAsync();
                    return response;
                }
                else
                {
                    return Request.CreateResponse(HttpStatusCode.InternalServerError, "Model state is invalid");
                }
            }
            catch (Exception ex)
            {
                return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message);
            }
        }

и это мой код (AngularJS)

$.ajax({
       type: 'POST',    
       url : 'http://localhost:50001/api/Students/ajout',
       dataType: 'jsonp',
       contentType: "application/json; charset=utf-8",
       data: { FirstName: ''+$scope.FirstName+'', LastName: ''+ $scope.LastName+'' , Email: ''+ $scope.Email+'' , DropOut:'' +$scope.dropout.value1+'' , Live: ''+$scope.live.value2+'' , ClassId:2, ImageId:1}, // On fait passer nos variables, exactement comme en GET, au script more_com.php
       success: function(data){                             
            console.log("success");
       },
       failure: function(errMsg) {
        console.log(errMsg);
    }   
    });

вы можете понять, как я могу справиться с этой проблемой, спасибо за помощь

Обновление: я изменил код следующим образом:

$.ajax({
       type: 'POST',    
       url : 'http://localhost:50001/api/Students/ajout',
       dataType: 'json',
       contentType: "application/json; charset=utf-8",
       data: { FirstName: ''+$scope.FirstName+'', LastName: ''+ $scope.LastName+'' , Email: ''+ $scope.Email+'' , DropOut:'' +$scope.dropout.value1+'' , Live: ''+$scope.live.value2+'' , ClassId:2, ImageId:1}, // On fait passer nos variables, exactement comme en GET, au script more_com.php
       success: function(data){

      $rootScope.usersData = angular.toJson(data);
       console.dir($rootScope.usersData);                                 
            console.log("success");
       },
       failure: function(errMsg) {
        console.log(errMsg);
    } });

но я получаю эту ошибку: XMLHttpRequest не может загрузить http://localhost: 50001/api/Students/ajout. Ответ на предполетный период имеет недопустимый код статуса HTTP 405

  • 1
    Я считаю, что вы не можете POST через JSONP
  • 2
    Это код jquery, а не angularjs
Показать ещё 2 комментария
Теги:
rest
web-services

1 ответ

1
Лучший ответ

В вашем api попытайтесь удалить [Route ("api/Students/ajout")], а вместо [System.Web.Http.ActionName("Создать")] поставьте [HttpPost]. В вашем контроллере я советую вам использовать запросы angularjs, а не запросы ajax.

этот запрос должен выполняться, если вы отредактируете свой контроллер api:

var request = $http({
    url:"api/students/",
    dataType:"json", 
    method:"POST",
    data:JSON.stringify(student),//you can send directly the object student if is well-trained or use params:{'name':value, ...}
    contentType:"application/json; charset=utf-8"
}); 

И в вашем контроллере Api для восстановления вашего объекта, если вы используете JSON.stringify, измените свой метод на:

 [HttpPost]
    public void CreateStudent([FromBody]Student value)
    {
      ...
    }

Я не знаю, если вы это сделаете, но в своем html вместо связывания свойства firstname на вашем входе свяжите student.firstName. Подобно этому вы можете напрямую восстановить $ scope.student с помощью свойства $ scope.student.firstName вместо восстановления каждого свойства по одному. И так отправляйте напрямую объект, как я вставляю в пример.

Поэтому я надеюсь, что это будет полезно. Держите меня в курсе вашего прогресса. Приятного дня.

  • 1
    И в вашем контроллере api. Над именем вашего класса добавьте «[Route (« api / [controller] »)»), как это в вашем запросе, вам больше не нужно добавлять полный URL и просто использовать «api / Students».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню