Как передать сложный объект как $ http params и получить как модель представления в действии контроллера API - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть конечная точка 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; }
  }

Я вызываю эту конечную точку API с конца angularjs -

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].Но я не хочу делать это.

1 Ответ

0 голосов
/ 12 февраля 2019

Вы должны быть в состоянии сделать

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

По умолчанию web api (и asp.net mvc) в запросе POST десериализует (ссылку) аргументы объекта из тела сообщения http ( data * 1005)*) и типы значений и строковые аргументы из параметров URL ( params ).

...