В прошлых темах были рассмотрены простейшие запросы к файлу json, который содержал некоторые данные. Однако нередко возникает необходимость обращаться с более сложными запросами к удаленному ресурсу, передавая ему некоторые параметры. Вначале рассмотрим, как передать параметры в get-запросе.
Допустим, на стороне сервера действует некоторый обработчик или скрипт, который принимает в качестве параметра некоторое число и вычисляет его факториал.
Например, в PHP мы могли бы определить следующий простейший скрипт getFactorial.php:
1 2 3 4 5 6 7 8 910111213141516
<?phpif(isset($_GET['number'])){$num=$_GET['number'];$result=1;for($i=1;$i<=$num;$i++){$result*=$i;}echo$result;}else{echo"Введенные данные некорректны";}?>
В ASP.NET MVC это могло бы быть следующее действие контроллера:
Это может быть какая-то другая технология сервера. Но вне зависимости от выбранной технологии следует учитывать ограничения на кроссдоменные запросы. В частности, если наше приложение на Angular запускается в одном домене, а сервер, обрабатывающий запросы, запущен на другом домене, то на сервере нам надо включить технологию CORS. В PHP для этого можно добавить заголовки в скрипт:
В других технологиях могут применяться другие способы добавления CORS.
Для отправки запроса из Angular определим следующий сервис:
1 2 3 4 5 6 7 8 910111213141516
import{Injectable}from'@angular/core';import{HttpClient}from'@angular/common/http';@Injectable()exportclassHttpService{constructor(privatehttp:HttpClient){}//http://localhost:60489/Home/GetFactorial?number= ASP.NET MVC//http://localhost:8080/angular/getFactorial.php?number= PHPgetFactorial(num:number){returnthis.http.get('http://localhost:60489/Home/GetFactorial?number='+num);}}
Поскольку данные передаются через запрос GET, то мы можем конкатенировать нужное число со строкой запроса.
Также для определения параметров в запросе можно использовать класс HttpParams. В частности, изменим сервис HttpService следующим образом:
1 2 3 4 5 6 7 8 91011121314151617181920212223
import{Injectable}from'@angular/core';import{HttpClient,HttpParams,}from'@angular/common/http';@Injectable()exportclassHttpService{constructor(privatehttp:HttpClient){}//http://localhost:60489/Home/GetFactorial?number= ASP.NET MVC//http://localhost:8080/angular/getFactorial.php?number= PHPgetFactorial(num:number){constparams=newHttpParams().set('number',num.toString());returnthis.http.get('http://localhost:60489/Home/GetFactorial',{params});}}
С помощью метода set() объекта HttpParams устанавливаются параметры, и затем этот объект передается в запрос. В итоге результат будет тот же, что и в примере выше.