2017-02-20 26 views
0

Я могу получить $ http.get(), работающий отлично с вызовом моей функции управления веб-API, но когда я пытаюсь сделать post(), он дает 404.

Угловой:

// call API to update 
$http.post("api/Store/UpdateField", $httpParamSerializer({ ID: rowEntity.ID, columnName: colDef.name, value: newValue})) 
    .then(function (response) { 

    }, 
    function (error, status) { 
    }); 

C#:

[RoutePrefix("api/Store")] 
public class StoreController : ApiController 

    [Route("UpdateField")] 
    [HttpPost] 
    public async Task<bool> UpdateField(int ID, string columnName, string value) 
    { // stuff here } 
} 


// routes 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API routes 
      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute(
       name: "API1", 
       routeTemplate: "api/{controller}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

      config.Routes.MapHttpRoute(
       name: "API2", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

      // Remove the XML formatter so json is returned instead 
      config.Formatters.Remove(config.Formatters.XmlFormatter); 
      config.Formatters.Add(config.Formatters.JsonFormatter); 
     } 
+0

Пожалуйста, добавьте '' global.asax. – lin

+0

Вам нужны маршруты? – user441521

+0

Это может быть проблема с принятыми глаголами на сервере, проверьте файл web.config. –

ответ

1

Что я делать и всегда работать для меня:

[HttpPost] 
    [Route("MyRoute")] 
    public HttpResponseMessage SaveEntity(MyModelOrCommand model) 
    { 
     try 
     { 
      object objReturned = bus.SendWithReturn(model); 
      if (objReturned.GetType() == typeof(Validation)) 
      { 
       return Request.CreateResponse(HttpStatusCode.BadRequest,     ((Validation)objReturned).Messages); 
      } 
      return Request.CreateResponse(HttpStatusCode.OK, objReturned); 
     } 
     catch (Exception ex) 
     { 
      return Request.CreateResponse(HttpStatusCode.InternalServerError, ex); 
     } 
    } 

    angular.module('MyModule').service('Module', ['envService', '$http', paService]) 
    function paService(envService, $http) { 
    MyMethod: function (data, callback) { 
      $http({ 
       method: 'POST', 
       url: envService.read('apiUrl') + '/MyRoute', 
       data: data, 
      }).then(function (result) { 
       callback(result); 
      }) 
      .catch(function (result) { 
       callback(result); 
      }) 
     } 
    } 

И для отправки объекта я использую JavaScript Object в запросе

var obj = new Object(); 
    obj.MyProperty1 = $scope.data; 
    obj.MyProperty2 = $scope.data2; 
    myService.MyMethod(JSON.stringfy(obj),function(result){ 
     if(result.status == 200){ 
      //do stuff 
     } 
    }); 
1

В адресс убедитесь, что вы пишете весь адрес http://localhost:56493/api/Store/UpdateField

Также рекомендую почтальона для тестирования вашего api: Postman Вы можете установить его или использовать расширение хром. более

Одна вещи, я рекомендую создать свой собственный JSON в угловом так:

var json = { 
     "Id": $scope.id, 
     "columnName": $scope.columnName, 
     "value":$scope.value 
    }; 

И называть это так:

$http.post("http://localhost:YOURPORT/api/Store/UpdateField", json) 
    .then(function (response) { 

    }, 
    function (error, status) { 
    }); 

Надеется, что это работает: D