如何在 API 控制器操作中将复杂对象作为 $http 参数传递并作为视图模型接收
How to pass complex object as $http params and receive as a view model in API controller action
我有一个 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 端点。我的问题是如何从 angular 端传递参数,这将自动映射到 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
}
});
None 其中似乎有效。这意味着参数没有正确映射到 API 方法的参数中。在这种情况下传递参数的理想方式是什么?
我不想更改我的 API 方法的参数。 我知道我可以使用 [FromBody] or [FromURI]
。但我不想做那些。
你应该可以做到
$http({
method: 'POST',
url: ENV.apiEndpoint + 'tags',
params:{
entityType: entityType
},
data: someModel
});
默认情况下,Web api(和 asp.net mvc)在 POST 请求中反序列化(引用)来自 http 消息正文的对象参数(data) 以及来自 URL 参数 (params) 的值类型和字符串参数。
我有一个 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 端点。我的问题是如何从 angular 端传递参数,这将自动映射到 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
}
});
None 其中似乎有效。这意味着参数没有正确映射到 API 方法的参数中。在这种情况下传递参数的理想方式是什么?
我不想更改我的 API 方法的参数。 我知道我可以使用 [FromBody] or [FromURI]
。但我不想做那些。
你应该可以做到
$http({
method: 'POST',
url: ENV.apiEndpoint + 'tags',
params:{
entityType: entityType
},
data: someModel
});
默认情况下,Web api(和 asp.net mvc)在 POST 请求中反序列化(引用)来自 http 消息正文的对象参数(data) 以及来自 URL 参数 (params) 的值类型和字符串参数。