$http 就是angular提供的Ajax 服务
内部还涉及到了
$httpBackend, $httpProvider,
$q (angular的promise),
$cacheFactory (angular的cache机制) 等等
昨天第一次使用就遇到了在POST请求后台ashx无法后去data的悲剧.
翻了一下源码
原来问题出在 Content-type 上
angular 默认的 Content-type 是 application/json 而我们平常通常是用 application/x-www-form-urlencoded (jQuery也是这个)
var CONTENT_TYPE_APPLICATION_JSON = {‘Content-Type‘: ‘application/json;charset=utf-8‘}; headers: { common: { ‘Accept‘: ‘application/json, text/plain, */*‘ }, post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), //shallowCopy是浅拷贝 put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON) }, // transform outgoing request data transformRequest: [function(d) { return isObject(d) && !isFile(d) && !isBlob(d) ? toJson(d) : d; //data 会被处理成json }],
在.ashx 的情况下,如果我们调用 content.Request["key"] , 是没办法获取到data
我们可以用原始的方式来解决这个问题
StreamReader reader = new StreamReader(context.Request.InputStream, Encoding.UTF8); string json = reader.ReadToEnd(); //这个就是data了,是json各式哦
未完待续...
原文:http://www.cnblogs.com/keatkeat/p/3900820.html