按照之前的文章《创建第一个WebAPI项目》新建好WebAPI项目后,在本项目中调用WebAPI没问题。
但今天在另一个项目调用这个WebAPI项目,就一直没有数据返回。纠结了一个下午,发现原来是跨域问题。在以下文章得到解决方法。
https://www.cnblogs.com/hnsongbiao/p/9375997.html
以下记录本次问题解决过程:
1、使用Nuget搜索“microsoft.aspnet.webapi.cors”安装第一个。安装好后可以“引用”处查看到以下2个packages
2、在App_Start文件夹下面的WebApiConfig.cs文件夹配置跨域:
3、如文章的言,在IE下确实还是不行。
那么如何解决IE浏览器支持问题呢,其实在调用处指定 jQuery.support.cors = true; 这一句就能解决IE8、9的问题了。--加了“jQuery.support.cors = true;”果然可以。
4、考虑到安全问题。不能对所有请求都接受。于是需要限制请求的来源。
配置方法一
在Web.Config配置:
<appSettings>
<!--限制请求到WebAPI的来源 -->
<add key="cors:allowedMethods" value="*"/>
<add key="cors:allowedOrigin" value="http://localhost:8089"/>
<add key="cors:allowedHeaders" value="*"/>
</appSettings>
(PS:注意需要引用System.Configuration)
--经测试,如果非http://localhost:8089 调用,确实调用不成功。
配置方法二
如果你只想对某一些api做跨域,可以直接在API的类上面使用特性标注即可。
[EnableCors("http://localhost:8082,http://localhost:8089", "*", "*", SupportsCredentials = true)]