我正在尝试使用.net
的OData客户端连接到Dynamics 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 - 未经授权:访问被拒绝
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
一般情况下,我只使用JavaScript中的OData客户端。使用.NET时,我使用SDK库,通过CrmServiceClient类提供身份验证和访问。
要使用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的部署
使用适用于Dynamics 365的Web API(在线)或内部部署时 面向Internet的部署(IFD)您必须使用OAuth,如中所述 使用OAuth连接到Microsoft Dynamics 365 Web服务。
如果您正在使用JavaScript创建单页面应用程序(SPA) 您可以使用adal.js库,如使用OAuth中所述 用于将单页应用程序连接到的跨源资源共享 Microsoft Dynamics 365。