如何在使用Angular 2(TypeScript)构建的SPA中对Dynamics CRM Web API进行身份验证和查询?
到目前为止的研究表明:到目前为止,我的尝试涉及克隆使用ADAL构建的各种Angular 2 repos,例如this one,并编辑其配置文件以指向我的Azure应用程序。这些尝试都导致401 (Unauthorized) cross-domain
错误,我的separate question详细说明了这些错误。
在this中使用相同的配置(例如cliendId
)来自Microsoft的JavaScript演练成功。
答案 0 :(得分:1)
此 Access-Control-Allow-Origin 问题更多地与服务器端相关。你使用Angular 1或Angular 2开发并不重要。
您可以确认此问题手动发送选项请求以验证您的域是否被允许请求。例如,我们可以使用以下请求检查是否允许来自http://localhost:3000
的AJAX请求:
OPTIONS: https://xxxx.crm.dynamics.com/api/data/v8.0/accounts
Authorization: Bearer {accessToken}
Origin: http://localhost:3000
Host: xxxx.crm.dynamics.com
Access-Control-Request-Headers: authorization
Access-Control-Request-Method: GET
如果允许域名,则返回如下所示的响应(请参阅Access-Control-Allow-Origin):
要解决此问题,您需要检查服务器是否支持CORS。如果不允许,您可以创建Web API作为解决方法的代理。
答案 1 :(得分:1)
Fei Xue发布的代码示例here on GitHub已证明在使用Azure托管的Dynamics CRM应用程序进行身份验证并查询Web API方面取得了成功。
我使用的类似代码示例导致SELECT YEAR( ordered_date + interval 3 month) AS Jahr,
SUM( preis ) AS Preis, count(*) as Anzahl
FROM wccrm_orders
WHERE typ = 'Brautkleid'
GROUP BY Jahr
ORDER BY Jahr ASC;
HTTP错误。为什么这个样本有效,而其他人暂时没有答案。