当我访问方法A时,由于CORS错误,我通过了但不是方法B:
对预检请求的响应未通过访问控制检查:否 '访问控制允许来源'标题出现在请求的上 资源。起源' http://localhost:49766'因此是不允许的 访问。响应的HTTP状态代码为404.
为什么一个人工作而另一个人不工作?如错误所示,我的客户端应用程序也在本地运行(在端口49766上)。它是从Visual Studio 2017启动的。使用主机头和hosts文件中的条目,api在IIS中本地运行。
这是我的asp.net web api控制器的顶部
//-- this works as expected
getBlogPosts(): Observable<BlogPost[]> {
var headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post("http://myapi.testapp.com/api/gfNet/GetBlogPosts",
{ postDate: '', bodyContent: '', Title: '' })
.map((res:Response) => res.json())
.catch(this.handleError);
}
//-- this results in cors error
getBlogPost(postId:string): Observable<BlogPost> {
var myHeaders = new Headers();
myHeaders.append('Content-Type', 'application/json');
let myParams = new URLSearchParams();
myParams.append('Id', postId);
let options = new RequestOptions({ headers: myHeaders, params: myParams });
return this.http.get("http://myapi.testapp.com/api/gfNet/GetBlogPost",options)
.map((res: Response) => res.json())
.catch(this.handleError);
}
这是我的两个Angular服务方法
{{1}}
答案 0 :(得分:1)
Cors不是客户端问题,cors由浏览器和您的服务器处理。您的客户端应用程序(应该)不知道它。浏览器使用 OPTIONS / api / gfNet / GetBlogPost 预先填写 GET / api / gfNet / GetBlogPost 的请求,并检查响应的允许来源是否为您当前正在使用的一个,如果没有,它将不会触发您的原始请求。
状态代码404表示您的网络服务器无法找到您的角度应用程序正在查找的资源。这可能是由于使用了错误的uri,而不是您的控制器,内置的处理请求。它为未知资源返回404,而不是设置cors标头,因为它没有配置为这样做。
我建议在chrome dev控制台中检查您的请求,确保他们使用正确的URL,并查看响应是否有任何有意义的错误消息,并检查服务器的日志以获取线索。使用REST客户端(如邮递员或curl等工具)测试您的api可能是确保您的终端正常工作的好方法;他们不关心执行cors规则,但你也可以发送OPTIONS请求来测试你的cors政策。
如果您未能确定问题,则应使用asp webapi控制器的实现更新问题。