如何使用Aurelia-http-client post方法使用CORS

时间:2016-09-03 00:43:51

标签: c# wcf cors aurelia aurelia-http-client

我正在使用Aurelia / Typescript,我有一个aurelia-http-client实例,可以访问我的WCF服务并进行调用。我的GET方法效果很好,但是当我尝试POST时,我得到了预检405"错误告诉我该方法是不可接受的。我尝试在我的WCF和所有标签中添加各种标签,但没有任何效果。

如果我使用aurelia-fetch-client,fetch工作正常(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
            });

这是我的WCF服务中的webInvoke方法:

[OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "/GetData/{id}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
        Person Person(string name, string ticket);

1 个答案:

答案 0 :(得分:0)

我进行了类似的练习,我发现我的大多数问题都是在配置服务时。

我确实需要在http客户端添加Accept标头:

    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#content

该链接中的代码并不是真正的生产准备,主要是因为它没有很好地验证源代码,但我认为这个概念是合理的。