У меня была аналогичная проблема с Angular 1, поэтому я понимаю, как реализовать, только мне не хватает последнего шага.
Как и в прошлый раз, парень, который сделал backend для нашего приложения, принимает запросы с типом application/x-www-form-urlencoded
и точно так же, как Angular 1, поэтому Angular 2 отправляет их с типом application/json
.
Что я сделал с ng1, так это то, что в config я изменил http-провайдер, чтобы запустить urlencoded над телом каждого запроса.
В ng2 я вижу, что есть https://angular.io/docs/ts/latest/api/http/BaseRequestOptions-class.html
a BaseRequestOptions
, который, как я полагаю, сделан именно для этой единственной документации, бит not there
, поэтому я не уверен, как это реализовать правильно (я также новичок в TypeScript).
Как это сделать, чтобы каждый из моих post
и других запросов отправлялся как urlencoded
в конце (я также хочу, чтобы функция запускалась на теле так, чтобы она фактически была указана на urlencoded).
Кроме того: почему нет более простой опции для этого, так как теперь я вижу, что и ASP.Net, и Flask (так что, как я полагаю, многие другие) не поддерживают application\json
по умолчанию?
EDIT: Я создал пользовательскую функцию, которую я использую для каждого объекта, который я отправляю в модуле POST, но я надеюсь, что есть более простое и более общее решение.
import { URLSearchParams } from 'angular2/http';
export function urlEncode(obj: Object): string {
let urlSearchParams = new URLSearchParams();
for (let key in obj) {
urlSearchParams.append(key, obj[key]);
}
return urlSearchParams.toString();
}
а затем я использую его как
this.http.post('http://localhost:5000/user/auth/login', urlEncode(data))