【问题标题】:Not getting my parameter from the body of the request没有从请求正文中获取我的参数
【发布时间】:2016-03-02 18:43:33
【问题描述】:

我尝试点击我的 API 控制器,我可以在那里实现它。但是,该方法没有从请求正文中获取我的参数。我知道这是一件小事。

我尝试过以多种不同方式围绕添加参数移动服务。到目前为止似乎没有任何效果。

注意事项

如果有帮助,这是一个 MVC 4 应用程序。我相信这是角度语法或控制器属性中的一些东西。

我正在使用 HTTPPost。

服务

(function () {
'use strict';
var rmdsnewServices = angular.module('rmdsnewServices', ['ngResource']);

rmdsnewServices.factory('rmds', ['$resource',
  function ($resource) {
      return {
          rmdnewly: $resource('/api/rmd/', {}, {
              query: {
                  method: 'GET', params: {}, url: '/api/rmd/getNewly/', isArray: false,
                  transformResponse: function (data) { return { list: angular.fromJson(data) } }
              }
          }),

          rmdsave: $resource('/api/rmd/AddRMD/:newrmd', { newrmd: '@newrmd' }, {
              save: {

                  method: 'POST', params: { newrmd: '@newrmd' }

              }

          })



      };
  }]);
})();

API 控制器

[Route("api/rmd/AddRMD")]
    [HttpPost]
    public HttpResponseMessage AddRMD([FromBody]string newrmd)
    {
        var rmd = newrmd;

        bool result;
        //result = rs.AddRMD(newrmd);
        result = true;
        if (result)
        {
            return new HttpResponseMessage(System.Net.HttpStatusCode.OK);
        }
        else
        {
            return new HttpResponseMessage(System.Net.HttpStatusCode.ExpectationFailed);
        }
    }

【问题讨论】:

  • IINM 您正在发送一个 (JSON) 对象,但是,API 需要一个“简单的”string。检查浏览器发送的有效负载以验证实际发布到您的端点的内容。嗯……
  • 尝试在您的 api 中将签名更改为:public HttpResponseMessage AddRMD(string newrmd)
  • @AmmarHamidou 如果我取下 [FromBody],我将不再使用该方法。我得到一个 404 未找到。
  • @EdSF 我正在使用此链接中的示例。 asp.net/web-api/overview/formats-and-model-binding/…
  • 是的。如果您查看它使用 [FromBody] string name 的示例,您可以看到 API 期望在 “示例客户端请求” 中显示什么 - 您可以看到它只是一个 string(“Alice”),与您通过 Angular { newrmd: '@newrmd' }(json 对象)发送的内容相比

标签: asp.net angularjs asp.net-mvc asp.net-web-api2 angular-resource


【解决方案1】:

您的控制器操作需要一个字符串。 此外,您的 $resource 不需要在 url 上发送 :param:

                      rmdsave: $resource('/api/rmd/AddRMD/', { }, {
                      save: {
                          method: 'POST'
                      }
                  })

然后简单地发送一个字符串,就会到达你的控制器:

        angular.module('rmdsnewServices').controller('MyController', ['rmds', function (rmds) {
        this.click = function() {
            rmds.rmdsave.save("'asd'");
        }
    }]);

发送一个对象而不是字符串:

rmds.rmdsave.save({Name:"someName"});



  public class Test
    {
        public string Name { get; set; }
    }

    public class rmdController : ApiController
    {
        [HttpPost, Route("api/rmd/AddRMD")]
        public HttpResponseMessage SomePath([FromBody] Test newrmd)
        { ...

【讨论】:

  • 如果我想发送 Json,这会是相同的设置吗?
  • 是的,除了您的 Web API 控制器将获取模型而不是字符串,并且框架将为您进行数据绑定。 rmds.rmdsave.save({}) 发送一个对象
  • 这如何改变我在我的 api 上的保存?
猜你喜欢
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
相关资源
最近更新 更多