最近写一个供其他系统调用的接口,决定使用wabapi,以前只是大概了解wabapi是什么东西,没有写过自己的api,从头开始学习.
1、开始创建一个webapi的项目,不得不说VS真的替我们省了好多事,基本需要的东西都创建好了,测试的valueAPI也可以正常调用;
2、创建完成之后开始添加编写字节的API,然后发现跨域调用的问题,从网上查了资料,配置webconfig,,添加如下配置
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With" />
<add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS" />
</customHeaders>
</httpProtocol>
不加认证的API加上之后基本就可以实现跨域调用了
3.API写完之后调用,因为API创建的数据库是数据code first ,会创建identityUser数据库,想让第三方系统的数据和已有数据库管理上,就在认证用户的时候做了点小处理,
GrantResourceOwnerCredentials方法中添加对aspnetuser和已有数据库的管理操作;
4.改完之后跨域调用发现能正常获取token,但是不能正常调用API,报405的错误,然后调试发现是头部认证没有穿过去,然后不论是post,还是get到服务器都成了option;
5.然后去网上找资料发现官方有对4.5以上版本提供跨域解决方案,就用nuget安装了aspnet.wabapi.cor;
6.添加跨域特性之后发现,还是不能调用,奇葩的是我把上面添加的webconfig里面的配置注释掉了,发现API能正常调用,但是token不能正常获取,ajax报错,更奇怪的是我在fiddle里面发现,token请求又是正常的,而且返回了有效的token;
7.调试没发现社么不对的地方,就以为是ajax格式的问题,结果改了N种格式也不对;
8.查资料的时候偶然发现一篇文章,里面说:要让WebAPI支持CORS,第一步就是在web.config里把“ <remove name="OPTIONSVerbHandler" /> ”删掉。
9.删掉之后果然直接使用配置webconfig的方式就能正常访问;
10.