1.跨域问题的由来
同源策略:出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容。
正是由于这个原因,我们不同项目之间的调用就会被浏览器阻止。比如我们最常见的场景:WebApi作为数据服务层,它是一个单独的项目,我们的MVC项目作为Web的显示层,这个时候我们的MVC里面就需要调用WebApi里面的接口取数据展现在页面上。因为我们的WebApi和MVC是两个不同的项目,所以运行起来之后就存在上面说的跨域的问题。
2.跨域问题的解决
CORS全称Cross-Origin ResourceSharing,中文全称跨域资源共享。它解决跨域问题的原理是通过向http的请求报文和响应报文里面加入相应的标识告诉浏览器它能访问哪些域名的请求。比如我们向响应报文里面增加这个Access-Control-Allow-Origin:http://localhost:5050,就表示支持http://localhost:5050里面的所有请求访问系统资源。其他更多的应用我们就不一一列举,可以去网上找找。
3.跨域问题解决过程
我们新建两个项目,一个WebApi项目(下图中WebApiCorsDemo),一个Web项目(下图中WebDemo)。WebApi项目负责提供接口服务,Web项目负责页面呈现。如下:
web项目页面如下:
webapi项目页面如下:
在webapi项目上面使用Nuget搜索“microsoft.aspnet.webapi.cors,安装后。然后在App_Start文件夹下面的WebApiConfig.cs文件夹配置跨域,如下图:
注意:我们暂定三个“*”号,当然,在项目中使用的时候一般需要指定对哪个域名可以跨域、跨域的操作有哪些等等。
运行两个项目,然后就可以跨域访问了