我已经使用这篇帖子Jquery Ajax Posting json to webservice通过“POST”网络服务将数据发送到服务器,但它已经像“获取”一样被追踪 在浏览器的“网络”部分,这是我得到的:
这是我的网络服务代码(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
答案 0 :(得分:1)
在你的api尝试删除[Route(“api / Students / ajout”)]而不是[System.Web.Http.ActionName(“Create”)] put [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"
});
如果您使用JSON.stringify,在您的Api控制器中恢复您的对象,请更改您的方法:
[HttpPost]
public void CreateStudent([FromBody]Student value)
{
...
}
我不知道你是否这样做,但是在你的html而不是绑定输入中的属性firstname,绑定student.firstName。像这样,您可以使用$ scope.student.firstName属性直接恢复$ scope.student,而不是逐个恢复每个属性。所以直接发送对象就像我在示例中那样。
所以我希望这会有所帮助。 让我知道你的进展。祝你有美好的一天。