我正在使用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);
答案 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
该链接中的代码并不是真正的生产准备,主要是因为它没有很好地验证源代码,但我认为这个概念是合理的。