Ajax跨域访问等问题
前端时间公司接口整顿,所有接口放一起了,然后我就写了一大堆API接口.......
今天用上了,公用人员库,前台通过ajax访问,
先是以‘json’作为数据格式进行访问,直接response field,,
发现是跨域了,尴尬,,,然后改成了‘jsonp’,好了,200 数据也能返回,但是ajax报错.parseerror.
第一种方法:
一堆百度,发现是jsonp格式和json格式是不一样的,jsonp指定了一个callback,然后查一大堆,发现可以解决,但是需要接口返回的时候也把callback指定上,拼接起返回..
感觉这样很不科学啊,,
第二种方法:
然后又是一通百度,发现一个很简单的让接口可以被跨域访问的方法.
直接配置文件下加:
1 <httpProtocol> 2 <customHeaders> 3 <add name="Access-Control-Allow-Origin" value="*" /> 4 <add name="Access-Control-Allow-Headers" value="Content-Type" /> 5 <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 6 </customHeaders> 7 </httpProtocol>
然后就ok拉,Access-Control-Allow-Origin可以指定允许访问的域名,*代表全允许..
第三种方法:引用System.Web.Cors.dll这个库,也可以做到跨域,只是还未尝试过..
顺带把API默认返回XML改为返回JSON的代码贴上
1 GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 2 GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add( 3 new QueryStringMapping("datatype", "json", "application/json"));
对于很多Post访问,报404的问题,解决如下:
[HttpPost] public bool Test([FromBody]string NAME) { return true; }
然后前端访问的时候:
$.ajax({ url: "http://10.12.1.9:9001/api/employee/GetDeptEmployee", type: 'post', data: { '': 'KD01.0001.0002.0001' }, dataType: 'json', success: function (result) {}});
注意data参数部分,单个参数要留空,,不知是为什么,其余问题可参照下面的链接,很详细。
http://www.cnblogs.com/landeanfen/p/5337072.html
https://www.cnblogs.com/landeanfen/p/5177176.html