1

我正在尝试使用适用于 .net 的 OData 客户端连接到 Dynamics 365 On-premises

我尝试通过基本身份验证进行身份验证,但这不起作用。

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 - 未经授权:访问被拒绝

有人可以帮我这是怎么做的吗?

4

1 回答 1

2

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

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

Web API 身份验证模式

使用 Web API 时,可以通过三种不同的方式来管理身份验证。在 Web 资源中使用 JavaScript

当您在 HTML Web 资源、表单脚本或功能区命令中使用带有 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 创建单页应用程序 (SPA),则可以使用 adal.js 库,如使用 OAuth 和跨域资源共享中所述将单页应用程序连接到 Microsoft Dynamics 365。

于 2017-06-23T17:01:52.133 回答