ajax自定义header跨域访问webapi 405异常的解决方法
来源:互联网 发布:mac版premiere出gif 编辑:程序博客网 时间:2024/05/16 07:15
http://www.cnblogs.com/dowork/p/5068517.html
在ajax对webapi进行CORS跨域访问过程中,如果自定义header,浏览器会发出一个options的请求。
询问浏览器是否支持自定义的header类型。
webapi需要做如下处理,才能正常返回浏览器请求
1 在global中对options方法进行预处理,返回服务支持的header类型
protected void Application_BeginRequest(object sender, EventArgs e) { var res = HttpContext.Current.Response; var req = HttpContext.Current.Request; //自定义header时进行处理 if (req.HttpMethod == "OPTIONS") { res.AppendHeader("Access-Control-Allow-Headers", "Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name,Token,Cookie"); res.AppendHeader("Access-Control-Allow-Methods", "POST,GET,PUT,PATCH,DELETE,OPTIONS"); res.StatusCode = 200; res.End(); } }
2 在Web.config中设置跨域参数
1
2
3
4
5
6
7
<httpProtocol>
<customHeaders>
<add name=
"Access-Control-Allow-Origin"
value=
"*"
/>
<add name=
"Access-Control-Allow-Headers"
value=
"*"
/>
<add name=
"Access-Control-Allow-Methods"
value=
"*"
/>
</customHeaders>
</httpProtocol>
3 浏览器经过预处理请求后即可自动访问原始请求,请求调用顺序如下
OPTIONS预处理请求:
1
2
3
4
5
6
7
8
9
10
11
OPTIONS http:
//localhost:8225/api/UserInfo/QueryUserByParam/ HTTP/1.1
Host: localhost:8225
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: http:
//localhost:5964
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Access-Control-Request-Headers: accept, content-type, token
Accept: */*
Referer: http:
//localhost:5964/Page/UserPage.aspx
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
预处理请求成功:
1
2
3
4
5
6
7
8
9
10
11
HTTP/1.1 200 OK
Server: Microsoft-IIS/10.0
Access-Control-Allow-Headers: Content-Type, X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name,Token,Cookie
Access-Control-Allow-Methods: POST,GET,PUT,PATCH,DELETE,OPTIONS
X-SourceFiles: =?UTF-8?B?RDpcQ29kZVx0b2dvXOa6kOS7o+eggVx0cnVua1xUb2dvXDAxLlRvR28uV2ViQXBpXGFwaVxVc2VySW5mb1xRdWVyeVVzZXJCeVBhcmFtXA==?=
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: *
Date: Tue, 22 Dec 2015 15:19:22 GMT
Content-Length: 0
浏览器自动发出原始请求:
1
2
3
4
5
6
7
8
9
10
GET http:
//localhost:8225/api/Common/GetUserTypes HTTP/1.1
Host: localhost:8225
Connection: keep-alive
Accept: */*
Origin: http:
//localhost:5964
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Token: dQTvMagtBk2cJg5WrpmcKQ
Referer: http:
//localhost:5964/Page/UserPage.aspx
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
阅读全文
0 0
- ajax自定义header跨域访问webapi 405异常的解决方法
- WebApi Cors 对ajax的跨域访问支持
- php跨域问题,ajax发送的header自定义问题
- webapi 跨域访问
- 通过ajax 跨域访问asp.net webapi
- ajax跨域访问的解决方法
- 允许WebApi跨域访问
- Ajax中header()无法跳转的解决方法
- jQuery.ajax 跨域请求webapi设置headers的解决方案
- MVC WebApi自定义异常过滤器
- 用ajax跨域访问通过php的问题,解决方法
- ajax跨域访问cookie丢失的解决方法
- Jquery ajax 调用WebService 跨域访问的解决方法
- ajax跨域访问cookie丢失的解决方法
- 跨域访问header的问题
- 在jquery的ajax中添加自定义的header信息
- [Ajax]设置Access-Control-Allow-Origin实现跨域访问(Header)
- webapi的跨域问题
- android接入百度SDK
- ubuntu下解决"无法获锁/var/lib/dpkg/lock-open"的方法
- 快速掌握设计模式之建造者模式!
- 记一次 java.lang.OutOfMemoryError: PermGen space解决过程
- 欢迎使用CSDN-markdown编辑器
- ajax自定义header跨域访问webapi 405异常的解决方法
- 软件工程 习题二 课后作业(2)
- [hiho1579] Reverse Suffix Array [ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 B]
- 【微信小程序】字符串转数字
- html实现用户注册(模板)
- 理解Java特性
- unity android .so 文件找不到,而且打不进apk包的问题
- tomcat的配置
- 深入浅出AQS之独占锁模式