将$http.post()转换为C#Web API控制器

将$http.post()转换为C#Web API控制器,c#,angularjs,asp.net-web-api2,C#,Angularjs,Asp.net Web Api2,我可以使用$http.get()调用我的Web API控制器函数,但当我尝试执行post()时,它会给出404 角度: // call API to update $http.post("api/Store/UpdateField", $httpParamSerializer({ ID: rowEntity.ID, columnName: colDef.name, value: newValue})) .then(function (response) { },

我可以使用$http.get()调用我的Web 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”)]
公共类存储控制器:ApiController
[路由(“更新字段”)]
[HttpPost]
公共异步任务UpdateField(int ID、字符串columnName、字符串值)
{//这里的东西}
}
//路线
公共静态无效寄存器(HttpConfiguration配置)
{
//Web API路由
config.maphttpAttribute路由();
config.Routes.MapHttpRoute(
名称:“API1”,
routeTemplate:“api/{controller}”,
默认值:新建{id=RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
名称:“API2”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
//删除XML格式化程序,以便返回json
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Formatters.Add(config.Formatters.JsonFormatter);
}

在地址中,确保写下整个地址

此外,我建议postman测试您的api: 您可以安装它,也可以使用chrome扩展

还有一件事,我建议您在angular中构建自己的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) {
     });
这样称呼它:

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

我所做的和一直为我工作的是:

    [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对象

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

请添加您的
global.asax
。您想要路由吗?这可能是服务器接受的谓词的问题,请检查您的web.config文件。找到答案。似乎您必须让C#函数选择与多个基元类型相对应的选项。然后在javascript端对数据进行字符串化: