webapi之jsonp调用
2016-01-30 15:57
555 查看
定义跨域handle
在Global.asax注册handler
webapi写法
前台写法
public class CorsHandler : DelegatingHandler { const string Origin = "Origin"; const string AccessControlRequestMethod = "Access-Control-Request-Method"; const string AccessControlRequestHeaders = "Access-Control-Request-Headers"; const string AccessControlAllowOrigin = "Access-Control-Allow-Origin"; const string AccessControlAllowMethods = "Access-Control-Allow-Methods"; const string AccessControlAllowHeaders = "Access-Control-Allow-Headers"; protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { bool isCorsRequest = request.Headers.Contains(Origin); bool isPreflightRequest = request.Method == HttpMethod.Options; if (isCorsRequest) { if (isPreflightRequest) { return Task.Factory.StartNew<HttpResponseMessage>(() => { HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); response.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First()); string accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault(); if (accessControlRequestMethod != null) { response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod); } string requestedHeaders = string.Join(", ", request.Headers.GetValues(AccessControlRequestHeaders)); if (!string.IsNullOrEmpty(requestedHeaders)) { response.Headers.Add(AccessControlAllowHeaders, requestedHeaders); } return response; }, cancellationToken); } else { return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(t => { HttpResponseMessage resp = t.Result; resp.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First()); return resp; }); } } else { return base.SendAsync(request, cancellationToken); } } }
在Global.asax注册handler
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configuration.MessageHandlers.Add(new CorsHandler()); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); }
webapi写法
public string Get(int id) { var callback = HttpContext.Current.Request["callback"]; var u = new User { Name = "AA", Age = id }; var result = new JavaScriptSerializer().Serialize(u); if (string.IsNullOrWhiteSpace(callback)) return result; return string.Format("{0}({1})", callback, result); }
前台写法
$.ajax({ type: "get", url: "http://localhost:21931/api/myapi/12311111", contentType: "application/json;", success: function (msg) { jalert(JSON.stringify(msg)); }, error: function (a, b, c) { jalert("error"); } });
相关文章推荐
- 用AFNetworking 做JSON数据解析遇到 3840 错误
- js如何实现继承
- jsonp调用webapi和mvc
- JavaScript实现右侧悬浮框
- EL表达式/JSTL复习总结
- Angular.js(出库列表页)
- JS获取时间差
- Jsoncpp的使用
- 生成模型一个比较好的插件ESJsonFormat
- js密码是否一致判定与输入字符限制
- JavaScript 函数
- JS 获取当前时间戳
- JS动画——制作鼠标移入移出的时候控件属性的变化
- 在子jsp页面中调用父jsp中的function或父jsp调用子页面中的function
- 【 D3.js 高级系列 — 2.0 】 捆图
- jstack Dump 日志文件中的线程状态
- JSTL 中的十二个核心标签
- calendar.js
- js获取get参数方法
- js弹窗层支持html代码