使用Cors在WebApi中实现跨域请求

第一步,在webapi项目中安装cors

在Web API配置文件中(Global.asax)进行全局配置:

  1. public class WebApiApplication : System.Web.HttpApplication
  2. {
  3. protected void Application_Start()
  4. {
  5. #region 跨域请求
  6. var config = GlobalConfiguration.Configuration;
  7. var cors = new EnableCorsAttribute("*", "*", "*");
  8. config.EnableCors(cors);
  9. #endregion
  10. AreaRegistration.RegisterAllAreas();
  11. GlobalConfiguration.Configure(WebApiConfig.Register);
  12. }
  13. }

第二部,代码编写

控制器头部代码

  1. [EnableCors(origins: "*", headers: "*", methods: "*")]
  2. public class MinderController : ApiController
  3. {
  4.  
  5. }

返回数据源代码,请注意,这里一定不要返回为字符串。如果返回为字符串,那么JSONP的方法不会识别出来,将永远不会去调用Success方法,我使用的是

angular中$http请求JSONP的,结果返回的数据状态码为200,但是一直没有执行success方法。调试了一天没有结果,后来返回的内容直接输出就可以了。
 
代码1:
  1. public HttpResponseMessage GetMindData(int? CompanyID, int? parent, string callback)
  2. {
  3.  
  4. Object root = new Object();
  5.  
  6. return new HttpResponseMessage(HttpStatusCode.OK)
  7. {
  8. Content = new StringContent(callback + "(" + JsonConvert.SerializeObject(root) + ")", System.Text.Encoding.UTF8, "text/plain")
  9. };
  10. }

代码2:改短代码是使用MVC的方式返回的JSONP数据:

  1. public JavaScriptResult GetMindData(int? CompanyID, string callback)
  2. {
  3.  
  4. Object root = new Object ();
  5. root.root = company;
  6. string js = callback + "(" + JsonConvert.SerializeObject(root) + ")";
  7.  
  8. return JavaScript(js);
  9. }

前端的调用:

angular中$http请求JSONP

  1. angular.module('kityminderDemo', ['kityminderEditor'])
  2. .controller('MainController', function ($scope, $http, $sce) {
  3.  
  4. $scope.initEditor = function (editor, minder) {
  5. window.editor = editor;
  6. window.minder = minder;
  7. /*
  8. $http.get("e.html").then(function (data) { //查询Use里的所有数据
  9. window.editor.minder.importData('json', JSON.stringify(data.data));
  10. });
  11. */
  12.  
  13. var myUrl = "https://XXX?callback=JSON_CALLBACK";
  14.  
  15. $sce.trustAsResourceUrl(myUrl);
  16. $http.jsonp(myUrl)
  17. .success(function (response) {
  18. var a = 0;
  19. console.log(response);
  20. window.editor.minder.importData('json', JSON.stringify(response));
  21. }).error(function (e) {
  22. console.log(e);
  23. });
  24.  
  25. };
  26. });

JS的JSONP请求方式:未经验证谨慎使用

  1. $.ajax({
  2. url: RESTurl,
  3. type: 'GET',
  4. dataType: 'jsonp',
  5. jsonp: 'callback',
  6. jsonpCallback: 'myCallback'
  7. });
  8.  
  9. window.myCallback = function (data) {
  10. console.log(data);
  11. };

使用Cors在WebApi中实现跨域请求,请求方式为angular的 $http.jsonp的更多相关文章

  1. vue项目中的跨域源请求拦截问题CORS头缺少'Access-Control-Allow-Origin'

    这里使用的是axios发请求出现的. 访问的api接口是: 在不同域之间访问是比较常见,在本地调试访问远程服务器....这就是有域问题. VUE解决通过proxyTable 解决办法: 1.检查请求方 ...

  2. jQuery+ASP.NET MVC基于CORS实现带cookie的跨域ajax请求

    这是今天遇到的一个实际问题,在这篇随笔中记录一下解决方法. ASP.NET Web API提供了CORS支持,但ASP.NET MVC默认不支持,需要自己动手实现.可以写一个用于实现CORS的Acti ...

  3. .net core webapi搭建(2)跨域

    Core WebAPI中的跨域处理 在使用WebAPI项目的时候基本上都会用到跨域处理 Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 如图所示 修改 Configure ...

  4. ASP.NET MVC & WebApi 中实现Cors来让Ajax可以跨域访问 (转载)

    什么是Cors? CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源服务器,发出XMLHttpReq ...

  5. 第十四节:Asp.Net Core 中的跨域解决方案(Cors、jsonp改造、chrome配置)

    一. 整体说明 1. 说在前面的话 早在前面的章节中,就详细介绍了.Net FrameWork版本下MVC和WebApi的跨域解决方案,详见:https://www.cnblogs.com/yaope ...

  6. ASP.NET Core-Docs:在 ASP.NET Core 中启用跨域请求(CORS)

    ylbtech-ASP.NET Core-Docs:在 ASP.NET Core 中启用跨域请求(CORS) 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. ...

  7. 无需CORS,用nginx解决跨域问题,轻松实现低代码开发的前后端分离

    近年来,前后端分离已经成为中大型软件项目开发的最佳实践. 在技术层面,前后端分离指在同一个Web系统中,前端服务器和后端服务器采用不同的技术栈,利用标准的WebAPI完成协同工作.这种前后端分离的&q ...

  8. js中各种跨域问题实战小结(一)

    什么是跨域?为什么要实现跨域呢? 这是因为JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.也就是说只能访问同一个域中的资源.我觉得这就有必要了解下javascript中的同源策略 ...

  9. 跨域调用webapi web端跨域调用webapi

    web端跨域调用webapi   在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webap ...

随机推荐

  1. 使用hql动态创建对象问题

    前段时间由于需求要添加报表数据,调整ireport后,打印pdf文件出现数据错位的情况,调试发现不是ireport问题,就查看了后台传送的数据,最后发现传送的对象属性值已经就是错位的,那就是获取对象时 ...

  2. git体验

    (1)git初始化配置#配置用户名git config --global user.name "azcode"#配置邮箱git config --global user.email ...

  3. react项目构建

    1.react脚手架 npm install -g create-react-app create-react-app myproject 2.页面配置(bootcdn) <script src ...

  4. PHP笔记:单引号与双引号区别

    PHP笔记:单引号与双引号区别 php中使用字符串时,可以使用单引号或者双引号,这里总结一下二者的不同: 一.解析字符内容 双引号中的变量会会经过编译器解析 单引号中的变量不会被解析 如下: < ...

  5. android的nfc卡模拟开发

    这是andorid官方文档对于卡模拟方式的描述: https://developer.android.google.cn/guide/topics/connectivity/nfc/hce 有两种方式 ...

  6. scrollview 嵌套imageview显示长图

    起初使用代码如下:但是图片显示不全,上半截被截 <ScrollView android:layout_width="match_parent" android:layout_ ...

  7. VS2015创建ASP.NET应用程序描述

    你的 ASP.NET 应用程序 恭喜! 你已创建了一个项目 此应用程序包含: 显示“主页”.“关于”和“联系方式”之间的基本导航的示例页 使用 Bootstrap 进行主题定位 身份验证,如果选择此项 ...

  8. stylus 实践

    音乐分享: Broken Back - <Halcyon Birds> —————————————————————————————————————————————————————————— ...

  9. go实现选择排序

    package main import "fmt" func SelectSort(data []int) { length := len(data) for i := 0; i ...

  10. CSS动画:animation、transition、transform、translate

    https://blog.csdn.net/px01ih8/article/details/80780470 一.区分容易混淆的几个属性和值 先区分一下css中的几个属性:animation(动画). ...