Передать строку запроса с объектом в WebAPI? - PullRequest
0 голосов
/ 17 января 2019

Можно ли передать как строку запроса, так и объект модели из angular в webapi? Мой первый параметр всегда заполнен, однако, параметр модели равен нулю, хотя я вижу все данные в полезной нагрузке запроса.

Моя модель

public Class Person
{
   public string Name {get; set;}
   public DateTime date {get; set;}
}

Мой метод API

    [Route("MyRoute/")]
    [HttpPost]       
    public DataSourceResult DataResult([ModelBinder(typeof(WebApiDataSourceRequestModelBinder))]DataSourceRequest request, Person model)
    {          

    }

Моя строка запроса

http://localhost:60655/api/DataInput/DataResult/?page=1&pageSize=22

Запрос полезной нагрузки

model: {name: "Time", date: "2014-12-18T18:35:52.087Z"…}

My Post call

const queryStr = `${toDataSourceRequestString(state)}`;
const ComplexObj = {
      model: model,     
    };
    const url = this._srvrUrl + apiRoute;    
    return this._http
      .post(`${url}?${queryStr}`, ComplexObj)

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вы можете просто использовать [FromUri], например:

[Route("MyRoute/")]
[HttpPost]       
public DataSourceResult DataResult([FromUri] DataSourceRequest request, Person model)
{          

}

См. Этот очень похожий вопрос, на который уже дан ответ: Сложный тип становится нулевым в параметре ApiController .

0 голосов
/ 17 января 2019

Очень непонятно, о чем вы спрашиваете, и там много неуместного кода. Я отвечаю на ваш титульный вопрос, но тело не помогло мне помочь вам.

Используя Angular HttpClient, вы можете передавать строки запроса в качестве параметров Http.

Это метод, который вызывает API и возвращает наблюдаемое:

method(object: any) {
  const body = JSON.stringify(object); // Create body object
  const headers = new HttpHeaders({'Content-Type': 'application/json'}); // Create headers
  const param = "some-param"; // Create param value
  return this.http.post<IResponse>('someurl.com/some/path', body, {headers: headers, params: new HttpParams().set('param name', param )});
} 
...