Как работать с CORS, используя почтовый метод Aurelia-http-client
Я использую Aurelia/Typescript, и у меня есть экземпляр aurelia-http-client, который обращается к моей службе WCF и делает звонки. Мои методы GET работают отлично, однако, когда я пытаюсь выполнить POST, я получаю сообщение об ошибке "preflight 405", говорящее мне, что этот метод неприемлем. Я пытался добавить все виды тегов в моем WCF и все, но ничего не помогло.
Довольно странно, что если я использую aurelia-fetch-client, выборка работает нормально (POST & GET). Я понятия не имею, как обойти это, но мне действительно нужно выяснить. Пожалуйста помоги!
Вот фрагмент моего класса обслуживания:
this.Client = new HttpClient()
.configure(x => {
x.withBaseUrl("http://localhost/myService.svc")
});
this.Client.post("GetData/" + id,
{
name: "name"
})
.then(resp => {
console.log(resp );
})
.catch(error => {
// Throw error
});
и вот мой метод webInvoke в моей службе WCF:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/GetData/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
Person Person(string name, string ticket);
1 ответ
Я прошел аналогичное упражнение и обнаружил, что большинство моих проблем заключалось в настройке службы.
Мне нужно было добавить Accept
заголовок к http-клиенту:
let client = new HttpClient()
.configure(x => {
x.withBaseUrl('http://localhost:50577/api');
x.withHeader('Accept', 'application/json');
});
Со стороны сервера я не мог заставить его работать, пока не реализовал обработчик CORS для явного перехвата и управления вещами. Я последовал примеру из блога MSDN и реализовал нечто подобное промежуточному программному обеспечению ASP.Net Core.
Пример для ASP.Net Web Api, но идея должна быть такой же: https://code.msdn.microsoft.com/Implementing-CORS-support-a677ab5d
Код в этой ссылке на самом деле не готов к работе, в основном потому, что он не выполняет хорошую работу по проверке исходного кода, но я думаю, что концепция обоснована.