【问题标题】:How to pass complex object as $http params and receive as a view model in API controller action如何将复杂对象作为 $http 参数传递并在 API 控制器操作中作为视图模型接收
【发布时间】:2019-07-05 19:55:14
【问题描述】:

我有一个 API 端点。控制器动作看起来像这样 -

public IHttpActionResult Post(string entityType, SomeModel someModel)

这里SomeModel是一个视图模型,看起来像这样-

public class SomeModel
  {
    public long? Id { get; set; }
    public long EntityId { get; set; }
    public string Text { get; set; }
  }

我从 angularjs 端调用这个 API 端点 -

return $http({
            method: 'POST',
            url: ENV.apiEndpoint + 'tags',
            params:{
              // here I want to pass parameters which will automatically map into API's two parameter(one string and the other view model)
            }
        });

我不想更改我的 API 端点。我的问题是如何从角度端传递参数,它会自动映射到 API 方法的参数。

我已经尝试了很多东西 -

var someModel = {id: 1, text:"something", entityId: 12}
return $http({
            method: 'POST',
            url: ENV.apiEndpoint + 'tags',
            params:{
              entityType: entityType,
              someModel: JSON.stringify(someModel)
            }
        });

或者,

var someModel = {id: 1, text:"something"}
return $http({
            method: 'POST',
            url: ENV.apiEndpoint + 'tags',
            params:{
              entityType: entityType,
              id: 1,
              text: "something",
              entityId: 12
            }
        });

这些似乎都不起作用。这意味着参数没有正确映射到 API 方法的参数中。在这种情况下传递参数的理想方式是什么?

我不想更改我的 API 方法的参数。我知道我可以使用 [FromBody] or [FromURI]。但我不想做那些。

【问题讨论】:

  • 你试过了吗? var someModel = {id: 1, text:"something", entityId: 12} return $http({ method: 'POST', url: ENV.apiEndpoint + 'tags', data:{ entityType: entityType, someModel: JSON. stringify(someModel) } });
  • 应该是JSON.stringify。您的代码中有拼写错误。
  • @BijayKoirala 是的,我试过了。我在输入问题时拼写错误。我编辑了问题

标签: c# angularjs asp.net-mvc api-design


【解决方案1】:

你应该可以的

    $http({
        method: 'POST',
        url: ENV.apiEndpoint + 'tags',
        params:{
          entityType: entityType
        },
        data: someModel
    });

默认情况下,POST 请求中的 web api(和 asp.net mvc)反序列化(引用)来自 http 消息体 (data) 的对象参数以及来自 URL 参数 (参数)。

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多