首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJs/ webAPI :在webAPI参数中接收null

AngularJs/ webAPI :在webAPI参数中接收null
EN

Stack Overflow用户
提问于 2015-08-04 09:59:45
回答 2查看 3.3K关注 0票数 2

我正在使用AngularJS,并试图从我的服务中向webAPI控制器发送一个json。当我通过via发送时,我在webApi函数中的参数中接收null。

我的职责是:

代码语言:javascript
复制
angular.module('productsApp')
    .service('ProductDetailService', ['$http', function ($http) {
        var urlBase = "/api/productdetail";

        this.Salvar = function (product) {
            var mydata = JSON.stringify(product);
            debugger;

            return $http({
                method: 'POST',
                url: urlBase + "/salvar/" + mydata,
                data: mydata,
                headers: { 'Content-Type': 'application/json' }
            });
        };
    }]);

我在webAPI中的代码是:

代码语言:javascript
复制
public class ProductDetailController : BaseController
{
    [Route("api/productdetail/salvar/{item}")]
    [HttpPost]
    public bool Salvar(string item)
    {
        return true;
    }
}

我的app.js是:

代码语言:javascript
复制
var app = angular.module('productsApp', ['ngRoute']);

app.config(['$routeProvider', function ($routeProvider)
{
    $routeProvider.when('/', {
        controller: 'ProductController',
        templateUrl: '/Scripts/App/Html/ProductList.html'
    }).
    when('/testprice', {
        controller: 'ProductController',
        templateUrl: '/Scripts/App/Html/ProductDetail.html'
    }).
    when('/editar/1', {
        controller: 'ProductController',
        templateUrl: '/Scripts/App/Html/ProductDetail.html'
    }).
    when('/api/productdetail/salvar/*', {
        controller: 'ProductDetailController',
        templateUrl: '/Scripts/App/Html/ProductDetail.html'
    })
    .otherwise({ redirectTo: '/' });

}]);

服务中的问题是,当我在webService null中添加webService类型时,我必须将数据添加到webService null中,如下所示:

http//.../api/productdetail/salvar/{mydata}

利用它,它是有效的。

怎么啦?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-04 10:14:47

如果要从HTTP/POST主体接收纯文本,则需要将[FromBody]属性应用于控制器操作的输入参数:

代码语言:javascript
复制
[Route("api/productdetail/salvar")]
[HttpPost]
public bool Salvar([FromBody] string item)
{
    return true;
}

虽然您可以这样做,但WebAPI希望您使用DTO实例设计DTO并接收POST数据(WebAPI根据其类型将JSON反序列化为参数):

代码语言:javascript
复制
[Route("api/productdetail/salvar")]
[HttpPost]
public bool Salvar(MyData item)
{
    return true;
}

MyData可能如下所示:

代码语言:javascript
复制
public class MyData
{
     public string Text { get; set; }
}

您的角应用程序应该发送这样的JSON:{ "Text": "hello world" }

最后,WebAPI执行RESTful API开发,您的路由是RPC风格的。您应该将其重命名为api/product/details,并将数据发布到此资源URI。否则,您就不会设计RESTful API了!

请记住,REST喜欢使用HTTP谓词来表示动作:

  • 职位是创造的。
  • PUT正在更新。
  • 获取就是得到所有,按页获取或按id获取。
  • 删除是按id、范围等删除的。
  • ..。

总之,不要在资源URI中使用谓词,而是使用HTTP谓词来表示对公开的资源要做什么。

票数 3
EN

Stack Overflow用户

发布于 2016-02-03 16:07:13

这让我很想吃东西。如果您的属性被设置为无效类型,就像在json中将字符串设置为对象一样。api不会翻译任何内容,您将得到一个null。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31806215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档