关注本人微信和易信公众号: 微软动态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站点,测试结果。发现确实可以访问到了,解决。
 
 

Dynamics CRM中跨域调用Web API 2的更多相关文章

  1. jQuery跨域调用Web API

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

  2. 创建dynamics CRM client-side (十四) - Web API

    Xrm.WebApi 是我们做前端开发不可不缺少的内容. Xrm.WebApi 分为online和offline online: 可以实现和服务器的CRUD交互 offline: 多用于mobile ...

  3. 解决Dynamics 365使用JS调用Web API时报no property value was found in the payload 错误。

    摘要: 微软动态CRM专家罗勇 ,回复323或者20190421可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 碰到如下报错: message: "An er ...

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

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

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

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

  6. Dynamics 365 CE的插件/自定义工作流活动中调用Web API示例代码

    微软动态CRM专家罗勇 ,回复325或者20190428可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 现在Web API越来越流行,有时候为了程序更加健壮,需要在插件 ...

  7. 在Angular.js中的H5页面调用Web api时跨域问题处理

    /// <summary> /// 被请求时 /// 在Angular.js中的H5页面调用Web api时跨域问题处理 /// </summary> /// <para ...

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

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

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

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

随机推荐

  1. 用 Python 鉴别色色的图片

    0 前言 实话实说啊,这个标题起得就有点标题党,识别是识别,准确率就有点玄学了. 1 环境说明 Win10 系统下 Python3,编译器是 Pycharm,需要安装 nonude 这个库. Pych ...

  2. Springboot 框架学习

    Springboot 框架学习 前言 Spring Boot是Spring 官方的顶级项目之一,她的其他小伙伴还有Spring Cloud.Spring Framework.Spring Data等等 ...

  3. Executor, ExecutorService 和 Executors 间的区别与联系

    UML简要类图关系: 下面详细看一下三者的区别: Executor vs ExecutorService vs Executors 正如上面所说,这三者均是 Executor 框架中的一部分.Java ...

  4. Mac命令行

    参考:http://www.cnblogs.com/-ios/p/4949923.html 必读 涵盖范围: 这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处.本文致力于做到覆盖面广(尽 ...

  5. 关于Linux虚拟化技术KVM的科普 科普四(From humjb_1983)

    另一组关于KVM的分析文档,虚拟化相关概念.KVM基本原理和架构一-概念和术语.KVM基本原理和架构二-基本原理.KVM基本原理及架构三-CPU虚拟化.KVM基本原理及架构四-内存虚拟化.KVM基本原 ...

  6. 玩转Web之html+CSS(一)---论坛首页表格的实现

    转载请说明出处,小编博客地址:http://blog.csdn.net/u012116457 最近本来想去写一个类似论坛的页面,论坛首页一般都需要一个表格去显示数据,自己简单的写了一下,先上一张图 c ...

  7. js定时器让动画隔秒运动

    现有一个需求,宝箱隔几秒动一次,抓住用户眼球,自己写了个 doem.

  8. GitHub 系列之「向GitHub 提交代码」

    1.SSH 你拥有了一个 GitHub 账号之后,就可以自由的 clone 或者下载其他项目,也可以创建自己的项目,但是你没法提交代码.仔细想想也知道,肯定不可能随意就能提交代码的,如果随意可以提交代 ...

  9. TestNG教程网站

    比较简明的一些TestNG教程网站 : https://www.jianshu.com/p/74816a200221 http://www.yiibai.com/testng/parameterize ...

  10. ratelimit.go

    // The ratelimit package provides an efficient token bucket implementation , false     }     tb.avai ...