Dynamics CRM中跨域调用Web API 2
生活随笔
收集整理的這篇文章主要介紹了
Dynamics CRM中跨域调用Web API 2
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
關(guān)注本人微信和易信公眾號: 微軟動態(tài)CRM專家羅勇 ,回復(fù)224或者20160611可方便獲取本文,同時(shí)可以在第一間得到我發(fā)布的最新的博文信息,follow me!我的網(wǎng)站是?www.luoyong.me?。 CRM不是信息孤島,一般需要和其他系統(tǒng)集成,我們有些項(xiàng)目就是自己搭建一個(gè)中間層,中間層去調(diào)用其他服務(wù),CRM不直接調(diào)用其他服務(wù),都是調(diào)用中間層的服務(wù)。我這里做個(gè)Demo,利用Web API 2搭建一個(gè)服務(wù),CRM中的Web資源調(diào)用這個(gè)服務(wù)。因?yàn)槲冶救藢τ赪eb API不熟悉,以前搭建服務(wù)用的是WCF,呵呵。 我還是先按照官方文檔打來搭建一個(gè)Web API 2的網(wǎng)站,我這里參考的是 Mike Wasson?的文章 Getting Started with ASP.NET Web API 2 (C#) ,放到了我的一個(gè)Azure App Service上,可以訪問的URL是: https://lyapitest.azurewebsites.net/?,如下圖所示,注意我是使用https 的,方便后面的測試。 ? 然后我在Dynamics CRM中新增了一個(gè)HTML 類型的Web資源,代碼如下,與前面的代碼沒有多少變化,只是調(diào)用的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中出現(xiàn)了一個(gè)錯(cuò)誤,錯(cuò)誤信息是: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瀏覽器中如下顯示: 我根據(jù)Mike Wasson?的文章 Enabling Cross-Origin Requests in ASP.NET Web API 2 來解決它,原文是英文的,我摘要主要意思做成簡單的操作方法如下: 1. 安裝 Microsoft.AspNet.WebApi.Cors 。我這里用命令行來安裝,點(diǎn)擊 工具 > NuGet包管理器 > 程序包管理器控制臺。 在這個(gè)控制臺中輸入命令:Install-Package Microsoft.AspNet.WebApi.Cors ,一會兒就提示安裝成功: 2. 打開項(xiàng)目App_Start 文件夾下的WebApiConfig.cs ,添加如下一行代碼:config.EnableCors(); ,如下圖所示: ? 3.啟用跨域訪問。可以對于全局、控制器或者操作啟用跨域訪問,原文有介紹,我這里使用控制器啟用跨域訪問,打開控制器類文件,添加如下代碼,注意那個(gè)origins 是要設(shè)置你調(diào)用的網(wǎng)站URL,我這里是我的CRM訪問URL,不要在URL的最后加上 / 這個(gè)反斜線。 ? 4.重新發(fā)布Web API站點(diǎn),測試結(jié)果。發(fā)現(xiàn)確實(shí)可以訪問到了,解決。轉(zhuǎn)載于:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Invoke_Web_API_2_Block_by_CORS_policy.html
總結(jié)
以上是生活随笔為你收集整理的Dynamics CRM中跨域调用Web API 2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转载:如何优雅的实现INotifyPro
- 下一篇: 登录加密的前后端测试