关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复224或者20160611可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me 。
CRM不是信息孤岛,一般需要和其他系统集成,我们有些项目就是自己搭建一个中间层,中间层去调用其他服务,CRM不直接调用其他服务,都是调用中间层的服务。我这里做个Demo,利用Web API 2搭建一个服务,CRM中的Web资源调用这个服务。因为我本人对于Web API不熟悉,以前搭建服务用的是WCF,呵呵。
我还是先按照官方文档打来搭建一个Web API 2的网站,我这里参考的是 Mike Wasson 的文章 Getting Started with ASP.NET Web API 2 (C#) ,放到了我的一个Azure App Service上,可以访问的URL是: https://lyapitest.azurewebsites.net/ ,如下图所示,注意我是使用https 的,方便后面的测试。
然后我在Dynamics CRM中新增了一个HTML 类型的Web资源,代码如下,与前面的代码没有多少变化,只是调用的URL变成了绝对URL:
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Product App</title><meta charset="utf-8" />
</head>
<body><div><h2>All Products</h2><ul id="products" /></div><div><h2>Search by ID</h2><input type="text" id="prodId" size="5" /><input type="button" value="Search" onclick="find();" /><p id="product" /></div><script type="text/javascript" src="../../common/js/jquery.min.js"></script><script>var uri = 'https://lyapitest.azurewebsites.net/api/products';$(document).ready(function () {// Send an AJAX request
      $.getJSON(uri).done(function (data) {// On success, 'data' contains a list of products.
            $.each(data, function (key, item) {// Add a list item for the product.
              $('<li>', { text: formatItem(item) }).appendTo($('#products'));});}).fail(function (jqXHR, textStatus, err) {$('#product').text('Error: ' + err);});});function formatItem(item) {return item.Name + ': $' + item.Price;}function find() {var id = $('#prodId').val();$.getJSON(uri + '/' + id).done(function (data) {$('#product').text(formatItem(data));}).fail(function (jqXHR, textStatus, err) {$('#product').text('Error: ' + err);});}</script>
</body>
</html>

这样在CRM中出现了一个错误,错误信息是:XMLHttpRequest cannot load https://lyapitest.azurewebsites.net/api/products. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://demo.luoyong.me' is therefore not allowed access.
在Chrome浏览器中如下显示:
我根据Mike Wasson 的文章 Enabling Cross-Origin Requests in ASP.NET Web API 2 来解决它,原文是英文的,我摘要主要意思做成简单的操作方法如下:
1. 安装 Microsoft.AspNet.WebApi.Cors 。我这里用命令行来安装,点击 工具 > NuGet包管理器 > 程序包管理器控制台。
在这个控制台中输入命令:Install-Package Microsoft.AspNet.WebApi.Cors ,一会儿就提示安装成功:
2. 打开项目App_Start 文件夹下的WebApiConfig.cs ,添加如下一行代码:config.EnableCors(); ,如下图所示:

3.启用跨域访问。可以对于全局、控制器或者操作启用跨域访问,原文有介绍,我这里使用控制器启用跨域访问,打开控制器类文件,添加如下代码,注意那个origins 是要设置你调用的网站URL,我这里是我的CRM访问URL,不要在URL的最后加上 / 这个反斜线。

4.重新发布Web API站点,测试结果。发现确实可以访问到了,解决。

转载于:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Invoke_Web_API_2_Block_by_CORS_policy.html

Dynamics CRM中跨域调用Web API 2相关推荐

  1. jQuery跨域调用Web API

    我曾经发表了一篇关于如何开发Web API的博客,链接地址:http://www.cnblogs.com/guwei4037/p/3603818.html.有朋友说开发是会开发了,但不知道怎么调用啊? ...

  2. 利用Fiddler模拟通过Dynamics 365的OAuth 2 Client Credentials认证后调用Web API

    微软动态CRM专家罗勇 ,回复337或者20190521可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me. 配置Dynamics 365 & PowerApps 支 ...

  3. Dynamics 365本地部署版本配置OAuth 2 Password Grant以调用Web API

    微软动态CRM专家罗勇 ,回复330或者20190504可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 根据官方建议,不要再使用Dynamics 365 Custome ...

  4. WebApi系列~通过HttpClient来调用Web Api接口

    HttpClient是一个被封装好的类,主要用于Http的通讯,它在.net,java,oc中都有被实现,当然,我只会.net,所以,只讲.net中的HttpClient去调用Web Api的方法,基 ...

  5. 以短链服务为例,探讨免AppKey、免认证、Ajax跨域调用新浪微博API

    新浪微博的API官方提供了很多种调用方式,支持编程的,归根结底就是两种: 1.基于Oauth协议,使用Open API.(http://open.weibo.com/wiki/%E6%8E%88%E6 ...

  6. python 图表_Python入门学习系列——使用Python调用Web API实现图表统计

    使用Python调用Web API实现图表统计 Web API:Web应用编程接口,用于URL请求特定信息的程序交互,请求的数据大多以非常易于处理的格式返回,比如JSON或CSV等. 本文将使用Pyt ...

  7. ASP.NET MVC4中调用WEB API的四个方法

    当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各种客户端去使用服务已经是十分普遍的做法.就.NET而言,目前提供了Remoting,WebService和WCF服务,这都能开发出功能十分强 ...

  8. java 调用webapi json_java通过url调用web api并接收其返回的json

    java通过url调用webapi并接收其返回的json数据,但现在结果总是:{"result":4,"data":{}}(未认证:),帮助文档如下:API使用 ...

  9. 【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

    注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. 3.3 Calling a Web API From a WPF Application ...

最新文章

  1. Oracle 11g下加密表空间的使用
  2. ROM、PROM、EPROM、EEPROM、RAM、SRAM、DRAM的区别
  3. src漏洞挖掘|一个谎言需要无数谎言来弥补
  4. android弹窗自动消失,Android点击popupwindow以外区域 popupwindow自动消失(转载)
  5. 快速修改HTML5,HTML5无刷新修改URL(示例代码)
  6. H - Tunnel Warfare HDU - 1540
  7. 关于centos 7 中service iptables save 指令使用失败的结局方案
  8. ICLR 2020 | Bengio 一作论文:因果机制、元学习与模型泛化如何产生关联?
  9. 关于一个简单算法的递归和循环转换实现
  10. Ps 初学者教程,如何使用色阶滴管工具校正色偏?
  11. 分层总和法matlab,高填方路基沉降检测之回归法
  12. html英文字母大小,英语字母书写笔顺 英语 , 26个英文字母大小写规范书写技巧...
  13. CentOS7安装PHP5.3.28
  14. 利用count if()+条件格式突出显示多余的重复值
  15. r语言library什么意思_汽车自动挡上的P、R、N、D、S、L和M,都表示什么意思?
  16. 硬盘RAID5后使用的实际容量
  17. MIT 18.01 Single Variable Calculus(单变量微积分)课堂笔记【4】——求导法则,隐函数微分和反函数求导
  18. 删除excel中的分页符
  19. 植物识别扫一扫的软件有哪些?植物识别软件推荐。
  20. 姚期智:为了中国计算机科学的腾飞(zz)

热门文章

  1. PB做的史上最强的矢量图监控软件(什么组态软件与监控软件的核心都源于此原理)...
  2. 湖南大学超级计算机中心 舒教授,湖南大学岳麓书院哲学系舒远招教授应邀来我院讲学...
  3. Hibernate标识符属性(主键)生成策略全析
  4. Android中启动Activity(startActivity)流程图分析
  5. gin将请求体绑定到不同的结构体中
  6. http几个版本的区别
  7. MySQL第12天:MySQL索引优化分析之性能优化案例实践
  8. time_wait状态产生的原因,危害,如何避免
  9. strcpy函数的使用
  10. 函数指针和函数指针数组及其应用