如何通过复杂的对象作为$ HTTP PARAMS和接收在API控制器动作视图模型

问题描述 投票:1回答:1

我有一个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
            }
        });

这些都不似乎工作。这意味着params为不能正确得到映射到API的方法的参数。什么是通过PARAMS在这种情形下的理想方式?

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

c# angularjs asp.net-mvc api-design
1个回答
1
投票

你应该能够做到

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

通过在从http消息主体(数据)和值类型和字符串参数POST请求反序列化(参考)对象参数从URL参数(PARAMS)默认的网页API(和asp.net MVC)。

© www.soinside.com 2019 - 2024. All rights reserved.