Dynamics crm 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

可能是重复的,但因为我没有找到确切的答案,所以我发布了这个

我有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.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;