Я прочитал много подобных проблем в StackOverflow, но решения для меня не работают.
У меня есть служба WCF REST:
[<OperationContract>]
[<WebInvoke(UriTemplate = "PostItem",
RequestFormat= WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, Method = "POST")>]
Я могу использовать его, используя Postman (расширение Chrome). Я передаю данные как "сырые", а не "urlencoded". И я получаю 200 код возврата.
Мне нужно вызвать этот метод, используя angularjs:
$http.post('http://192.168.1.65/Service1.svc/restapi/PostItem',
{
"Address": "г. Москва, ул. Соколово-Мещерская, д.25",
...
"User": ""
})
Я только что скопировал URL и JSON из Postman. Но я получаю сообщение об ошибке:
angular.js: 10722 ВАРИАНТЫ http://192.168.1.65/Service1.svc/restapi/PostItem http://192.168.1.65/Service1.svc/restapi/PostItem. Ответ для preflight имеет недопустимый код статуса HTTP 405
Я искал похожие проблемы и нашел два решения:
- Используйте jQuery для установки заголовка
Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
, но он не работает с моей службой WCF -
Установите собственные заголовки в моем Web.Config:
<httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Content-Type" /> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> </customHeaders> </httpProtocol>
Мне это не помогает. И я не уверен, что причина ошибки на стороне сервера. Расширение Postman может успешно вызвать этот метод.
Как я могу сделать тот же POST-вызов, используя AngularJS?
Обновление
Вот запрос OPTIONS:
Вкладки просмотра и ответа пустые
Обновление 2:
Все работает отлично в IE, но не работает в Chrome.