将$http.post()转换为C#Web API控制器
我可以使用$http.get()调用我的Web API控制器函数,但当我尝试执行post()时,它会给出404 角度:将$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) { },
// 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端对数据进行字符串化: