Dynamics crm Dynamics CRM-无法对Web API进行身份验证以使用数据?
可能是重复的,但因为我没有找到确切的答案,所以我发布了这个 我有dynamics CRM Web api的凭据&我在代码中使用它们,如下所示:Dynamics crm Dynamics CRM-无法对Web API进行身份验证以使用数据?,dynamics-crm,dynamics-crm-webapi,Dynamics Crm,Dynamics Crm Webapi,可能是重复的,但因为我没有找到确切的答案,所以我发布了这个 我有dynamics CRM Web api的凭据&我在代码中使用它们,如下所示: string username = @"user.crm@tmeic.in"; string password = @"XXXXXXXX"; string domain = @"tmeictest.crm8.dynamics.com"; string apiURL = @"https://tmeictest.api.crm8.dy
string username = @"user.crm@tmeic.in";
string password = @"XXXXXXXX";
string domain = @"tmeictest.crm8.dynamics.com";
string apiURL = @"https://tmeictest.api.crm8.dynamics.com/api/data/v8.2/";
然后,我使用以下方法初始化客户端:
string username = @"user.crm@tmeic.in";
string password = @"XXXXXXXX";
string domain = @"tmeictest.crm8.dynamics.com";
string apiURL = @"https://tmeictest.api.crm8.dynamics.com/api/data/v8.2/";
HttpClient client = GetNewHttpClient(username, password, domain, apiURL);
public 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;
}
我打电话是想得到答复
HttpResponseMessage msg = client.GetAsync(apiURL).Result;
但它给
未授权状态401
我直接登录了浏览器&我可以登录。但是在我的代码中使用它时,它不会进行身份验证
我在这里遗漏了什么吗?这里有一个例子,其中包含了大量C#的WebAPI示例代码:
//
///从应用程序的配置文件获取连接信息,然后
///使用此信息连接到指定的CRM服务。
///
///命令行参数。第一个指定了文件的名称
///连接字符串设置。
私有void ConnectToCRM(字符串[]cmdargs)
{
//创建一个helper对象以读取服务URL和应用程序的app.config
//注册设置。
配置配置=null;
如果(cmdargs.Length>0)
{config=newfileconfiguration(cmdargs[0]);}
其他的
{config=newfileconfiguration(null);}
//创建帮助对象以使用此连接信息对用户进行身份验证。
Authentication auth=新身份验证(配置);
//接下来,使用HttpClient对象连接到指定的CRM Web服务。
httpClient=新的httpClient(auth.ClientHandler,true);
//定义Web API基址、最大执行时间段和
//默认OData版本和默认响应有效负载格式。
httpClient.BaseAddress=新Uri(config.ServiceUrl+“api/data/”);
httpClient.Timeout=新的时间跨度(0,2,0);
httpClient.DefaultRequestHeaders.Add(“ODataMaxVersion”,“4.0”);
httpClient.DefaultRequestHeaders.Add(“OData版本”、“4.0”);
httpClient.DefaultRequestHeaders.Accept.Add(
新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
}
问题中的代码仅适用于内部CRM。我还没有测试下面的解决方案,但你可以试试。下面的客户ID将是您在AAD注册CRM时收到的ID。步骤
var client = new HttpClient();
var authenticationContext = new AuthenticationContext(
authenticationParameters.Authority, false);
AuthenticationParameters authenticationParameters =
AuthenticationParameters.CreateFromResourceUrlAsync(
"https://tmeictest.api.crm8.dynamics.com").Result;
var userCredential = new UserCredential(@"user.crm@tmeic.in", @"XXXXXXXX");
AuthenticationResult authenticationResult =
authenticationContext.AcquireToken(
authenticationParameters.Resource, @"" /* clientId */, userCredential);
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken);
HttpResponseMessage msg = client.GetAsync(apiURL).Result;