1

我试图连接到动态365在内部部署与OData的客户端.NET身份验证动态365在前提

我试图通过基本身份验证来验证,但是这是行不通的。

var c = new Microsoft.Dynamics.CRM.System(new Uri("https://mycrm01/crm/api/data/v8.2/")); 

c.SendingRequest2 += (o, requestEventArgs) => { 
    var creds = username + ":" + password; 
    var encodedCreds = Convert.ToBase64String(Encoding.ASCII.GetBytes(creds)); 
    requestEventArgs.RequestMessage.SetHeader("Authentication", "Basic" + encodedCreds); 
}; 

var contacts = c.Contacts.Where(x => x.Firstname=="testuser"); 
foreach (var contact in contacts) 
{ 

} 

我收到的错误是:HTTP错误401 - 未经授权:访问被拒绝

有人可以帮助我如何做到这一点?

回答

1

通常我只使用JavaScript的OData客户端。在使用.NET时,我使用通过CrmServiceClient类提供身份验证和访问的SDK库。

要使用的OData客户端从C#,本文概述了各种验证方法:https://msdn.microsoft.com/en-us/library/mt595798.aspx

的Web API认证模式

有使用 的Web API时管理认证三种不同的方式。在网页资源中使用JavaScript

当您在HTML网页资源中使用带有JavaScript的Web API时, 会形成脚本或功能区命令,您不需要包含任何代码 进行身份验证。在每种情况下,用户已经由应用程序认证了 ,认证由 应用程序管理。使用本地部署

当您使用Web API进行本地部署时,您必须包含 用户的网络凭据。下面的例子是C#功能 将返回一个HttpClient的配置对于一个给定用户的网络 凭据:C#

private HttpClient getNewHttpClient(string userName,string 
password,string domainName, string webAPIBaseAddress) { 
HttpClient client = new HttpClient(new HttpClientHandler() { Credentials = new NetworkCredential(userName, password, domainName) 
}); 
client.BaseAddress = new Uri(webAPIBaseAddress); 
client.Timeout = new TimeSpan(0, 2, 0); 
return client; 
} 

使用Microsoft Dynamics 365(在线)或面向Internet的部署

当您使用Web API for Dynamics 365(联机)或内部部署 面向Internet的部署(IFD),必须使用OAuth,如 中所述使用OAuth连接到Microsoft Dynamics 365 Web服务。

如果您正在创建使用JavaScript 可以使用adal.js库与 跨来源资源共享中使用OAuth描述单个页面应用程序连接到 的Microsoft Dynamics 365单页应用(SPA) 。