Angular2 $ http получает запрос к контроллеру web api с атрибутом маршрутизации

#angular #asp.net-web-api-routing

#angular #asp.net-web-api-routing

Вопрос:

У меня есть контроллер веб-Api с атрибутом маршрута, примененным к методу, определенному следующим образом:

 [Route("api/[controller]")]
public DataController(
[HttpGet("getdata/{a:int}/{b:int}/{dateFrom:datetime}/{dateTo:datetime}")]
public IActionResult GetEvents(Int32 a, Int32 b, DateTime? dateFrom, DateTime? dateTo)
{
    if (ModelState.IsValid)
    {
            data = dataService.GetData(a,b,dateFrom, dateTo);
            return Ok(data);
        }

        return BadRequest();
    }
}
  

Таким образом, открытый URL-адрес веб-api будет:
http://localhost:port/api/data/getdata/1/2/2016-10-12T00:00:00/2016-10-20T00:00:00

Когда я отправляю запрос GET с помощью расширения Postman Google Chrome, я могу нажать на это действие контроллера, и параметры URL обрабатываются нормально.

Я хотел бы получить данные из этого веб-api, используя http get от клиента angular2 :

 let params: URLSearchParams = new URLSearchParams();
params.set('a', 1);
params.set('b', 2);
params.set('dateFrom', '2016-10-12T00:00:00Z');
params.set('dateTo', '2016-10-15T00:00:00Z');

    return this._http.get(this._eventsUrl, {
        search: params
    }).map((response: Response) => <ModelObject[]>response.json())
        .catch(this.handleError);
  

этот вызов пытается получить данные с этого URL:
http://localhost:PORT/api/data/getdata?a=1amp;b=1amp;dateFrom=2016-10-12T00:00:00Zamp;dateTo=2016-10-15T00:00:00Z

как я могу настроить http.get из angular 2 для использования URL, подобного тому, который определен в маршрутизации web api?

Ответ №1:

URLSearchParams добавляет параметры в поисковую часть URL-адреса, которая находится после ‘?’.

Вам нужно создать переменную, которая содержит весь URL-адрес, как в:

 const url = `${this._eventsUrl}/${a}/${b}/${dateFrom}/${dateTo}`;
  

Обратите внимание на использование обратных ссылок для построения строки, содержащей переменные a, b, dateFrom, dateTo и вызов this.http.get(url).map