2017-01-28 5 views
1

Предисловие: Я использую 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?

+3

'params' для параметров URL запроса, запрос POST должен иметь * тело *. – jonrsharpe

+0

Вы ударили ноготь по голове. Спасибо! Просто отправьте ответ, и я дам вам кредит на это. Всегда цените детали, если вы хотите предоставить любые :) @jonrsharpe –

ответ

0

Использовать params вариант для GET запросов.

С params опцией вы можете задать параметры строки URL запроса, как baseurl.com?myParam=something

 Смежные вопросы

  • Нет связанных вопросов^_^