Как работать с 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

Код в этой ссылке на самом деле не готов к работе, в основном потому, что он не выполняет хорошую работу по проверке исходного кода, но я думаю, что концепция обоснована.

Другие вопросы по тегам