我正在尝试从我的角度应用程序获得一个json字符串到一个Web。在过去的6个小时里,我在互联网上到处寻找,试图找出我做错了什么,却不幸地失败了。
我已经检查了网络控制台,我可以将json看作表单数据,但是由于某种原因,我的WEB没有得到它。我看过其他几篇文章,但似乎没有对我的具体问题有所帮助。任何方向都会很好。我已经尝试过使用"transform“修复,但这并没有帮助。
WEB API的入口点
[HttpPost]
[Route("api/SkeltaInterfaceController/SaveWorkflow")]
public bool SaveWorkflow([FromBody] string json)
{
...
}
角呼叫
$scope.SaveWorkFlow = function () {
$http({
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
method: "POST",
url: webAPI,
data: {'DATA' : 'TEST DATA'
}
})
}
编辑: I更改了对此的角调用
$scope.SaveWorkFlow = function () {
$http({
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
method: "POST",
url: webAPI,
data: {'DATA' : 'TEST DATA'}
})
}
Web如下所示
[HttpPost]
[Route("api/SkeltaInterfaceController/SaveWorkflow")]
public bool SaveWorkflow([FromBody] TestModel json)
{
...
}
和模型
public class TestModel
{
public string DATA { get; set; }
}
但是,我仍然获得数据的空值,这是我设置的错误吗?
发布于 2015-11-16 11:20:00
我认为您的问题归结于期望接收字符串的WebApi控制器方法,但是您将它传递给一个对象。它是否至少命中了方法,但收到了null?
这取决于您试图发送到WebApi控制器方法的内容,但是如果您打算发送一个对象,您应该创建一个模型来表示您的WebApi项目中的对象,并让该方法以一个对象作为参数。
例如,您现在拥有它的方式,您可以这样做:
public class SaveModel
{
public string DATA {get; set;}
}
[HttpPost]
[Route("api/SkeltaInterfaceController/SaveWorkflow")]
public bool SaveWorkflow([FromBody] SaveModel model)
{ ...
发布于 2015-11-16 12:37:38
尽管您有了解决方案,但是有一些方法可以将简单的POST
数据(而不是对象)用于 Web API
服务。
假设您有这样一个POST API (在Test ApiController中)
public void Post([FromBody]string value)
{
//do something with value
}
在AngularJS
中,您可以发布到以下方法
(1)数据作为JSON
(默认)
$scope.Test = function () {
$http({
method: "POST",
url: "/api/Test",
data: JSON.stringify("test")
});
};
默认情况下,这将使用Content-Type: application/json
。服务器将把数据作为JSON处理。如果您查看请求,您将看到请求体是一个简单的字符串,如
"test"
对于复杂对象,可以看到JSON格式。
(2)数据为application/x-www-form-urlencoded
(如您的示例所示)
$scope.Test = function () {
$http({
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
method: "POST",
url: "/api/Test",
data: $.param({ "": "test" }),
});
};
在这里,我们显式地指定内容类型为application/x-www-form-urlencoded
,因此我们必须以该格式发送数据(非常像url查询字符串)。而且,在这里,数据中的空键只是为了满足Web API
__的奇怪的模型绑定要求!生成的数据将被编码如下
=test
我们已经和$.param({ "": "test" })
谈过了。原因之一是,FromBody
主要用于发送object
,而不是简单的原语值。
因此,您的代码的基本问题是,您指定了内容类型:application/x form-urlencoded,并且将数据发送为JSON!
https://stackoverflow.com/questions/33742749
复制