System.Web.Http.Cors配置跨域访问的两种方式
2016-12-05 18:22
519 查看
System.Web.Http.Cors配置跨域访问的两种方式
使用System.Web.Http.Cors配置跨域访问,众多大神已经发布了很多文章,我就不在详细描述了,作为小白我只说一下自己的使用心得。在webapi中使用System.Web.Http.Cors配置跨域信息可以有两种方式。一种是在App_Start.WebApiConfig.cs的Register中配置如下代码,这种方式将在所有的webapi Controller里面起作用。
using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; using System.Web.Http.Cors; namespace YDTG.Service { public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); //这是重点,从配置文件的appsettings节点中读取跨域的地址 var cors = new EnableCorsAttribute(ConfigurationManager.AppSettings["origins"], "*", "*"); config.EnableCors(cors); } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
配置文件如下,注意一定要加上http
<add key="origins" value="http://localhost:9012,http://192.168.1.108:9012" />
1
1
第二种方式就是在每个webapiController类中设置,即每个控制器个性化配置,如下代码。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Http.Cors; using System.Web.Mvc; namespace Service.Controllers { [EnableCors("http://localhost:9012,http://192.168.1.108:9012", "*", "*")] public class HomeController : Controller { public ActionResult Index() { ViewBag.Title = "Home Page"; return View(); } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
注意事项
EnableCors共三个参数分别为origins、headers和methods。origins配置允许访问的域名,多个域名以逗号分隔即可,域名一定要完整,如果是ip地址前面要加上“http”,只使用IP的话一定会失效的。参数headers配置所支持的资源。参数methods配置支持的方法,get、post、put等。如果允许任意域名、任意资源、任意方法访问自己的webapi,则三个参数全部使用星号”*”即可。“EnableCors(“http://localhost:9012,http://192.168.1.108:9012“, ““, ““)”中的配置如果出现错误的话不会报错,而是直接禁止未出现在配置表中的资源访问。
如果使用第一种方式那么可以从配置文件中读取网站列表,如果使用第二种方式,所有的参数只能使用常量。
http://blog.csdn.net/chaoyangzhixue/article/details/52251322
会得到CORS Access Deny,即跨域访问被拒绝。
对于C#做如下配置可允许资源的跨域访问:
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type" />
<add name="Access-Control-Allow-Methods" value="PUT,GET,POST,DELETE,OPTIONS"/>
</customHeaders>
</httpProtocol>
</system.webServer>
对于nodejs做如下配置可允许资源的跨域访问:
//设置CORS跨域访问
app.all('*', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With, accept, origin, content-type");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By", ' 3.2.1')
res.header("Content-Type", "application/json;charset=utf-8");
next();
});
Access-Control-Allow-Origin:*表示允许任何域发起请求,如果只允许特定的域访问,则设置Access-Control-Allow-Origin:xxx为具体域名即可。
Preflighted Requests(预检请求)
Preflighted Requests是CORS中一种透明服务器验证机制。预检请求首先需要向另外一个域名的资源发送一个 HTTP OPTIONS 请求头,其目的就是为了判断实际发送的请求是否是安全的。
下面的2种情况需要进行预检:
1、 简单请求,比如使用Content-Type 为 application/xml 或 text/xml 的 POST 请求;
2、中设置自定义头,比如 X-JSON、X-MENGXIANHUI 等。
http://blog.csdn.net/chaoyangzhixue/article/details/52251322
相关文章推荐
- webapi使用System.Web.Http.Cors配置跨域访问的几点注意事项
- webapi使用System.Web.Http.Cors配置跨域访问的几点注意事项
- webapi使用System.Web.Http.Cors配置跨域
- 跨域访问的两种解决方式:jsonp和cors
- Nginx配置同一个域名http与https两种方式都可访问
- 跨域访问的两种解决方式:jsonp和cors
- Nginx配置同一个域名同时支持http与https两种方式访问
- SVN-1.5.3+Apache-2.0.59在windows下的配置与权限设置,以及配置HTTP方式访问SVN服务器
- HttpWebRequest 下载网页Html代码 POST方式(站内使用了form方式) System.Net.WebException (417) Expectation failed
- apache 配置虚拟目录访问和域名访问的两种方式
- 支持RTSP和HTTP两种方式访问的IP WiFi摄像头
- 在运行配置文件中指定的扩展时出现异常。 System.Web.HttpException: 超过了最大请求长度。
- web.config中配置数据库连接的两种方式
- web.config中配置数据库连接的两种方式(<appSettings >与 <connectionStrings>)
- Struts2两种解耦访问WEB资源的方式
- HTTP访问的两种方式(HttpClient和HttpURLConnection)
- 3、WEB开发由浅入深系列BLOG-3(Servlet两种跳转方式,Servlet读取web.xml,Servlet配置)
- web.xml中配置http访问转向https
- web.xml配置struts2之后访问jsp页面报Http 404错误
- 用httpwebrequest访问跨域网站时对CookieContainer的处理