Предисловие: Я использую AngularJS 1.5.9.
При написании моей службы, этот код работает при отправке на сервер:
var request = {
url: '/connect/token',
method: 'POST',
data: $httpParamSerializer(params),
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
$http(request).then(function(response) {});
Тем не менее, кажется, противоречит здравому смыслу, чтобы использовать data
когда $ HTTP имеет аргумент использования params
, со следующим определением, как в AngularJS's documentation:
PARAMS - {.} Object - Карта строк или объектов, которые будет сериализовать с paramSerializer, занесенных в качестве GET параметров.
Как вы можете видеть, документация указывает, что этот аргумент предназначен для использования только для запросов GET. Я подтвердил это, когда я попытался использовать Params спор с моей просьбой POST:
var request = {
url: '/connect/token',
method: 'POST',
params: params,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
$http(request).then(function(response) {});
При отправке запроса POST в этом случае вы получите следующий ответ от сервера:
{
"error":"invalid_request",
"error_description":"A malformed token request has been received: the mandatory 'Content-Type' header was missing from the POST request."
}
Другими словами, если я не использую аргумент данных и не вызываю службу параметрического параметризатора в параметрах, которые я хочу передать, моя пользовательская служба не будет устанавливать заголовок Content-Type
по моему запросу, я подтвердил это в сети вкладку веб-инспектора.
TLDR; Почему я должен использовать аргумент данных и сериализовать параметры вместо того, чтобы просто использовать аргумент params
? И почему тип содержимого, который я указываю, игнорируется, когда я использую аргумент params
?
'params' для параметров URL запроса, запрос POST должен иметь * тело *. – jonrsharpe
Вы ударили ноготь по голове. Спасибо! Просто отправьте ответ, и я дам вам кредит на это. Всегда цените детали, если вы хотите предоставить любые :) @jonrsharpe –