创建联系人返回http 400-不良请求



我正在尝试在Office 365中创建联系人。" Postjson()"方法抛出以下错误。

远程服务器返回一个错误:(400)不良请求。

我已经在Azure AD中注册了该申请,并给出了所需的权限。我遵循了这篇文章。

我正在使用WebAPI .NET Core。以下是我的代码。任何帮助都将不胜感激。

public async Task<string> AcquireToken()
{
    var tenant = "red.onmicrosoft.com";
    var resource = "https://graph.microsoft.com/";
    var instance = "https://login.microsoftonline.com/";
    var clientID = "db19fbcc-d1e8-4d60-xxxx-xxxxxxxxxx";
    var secret = "EXh3MNe5tGW8+Jh1/3OXXXRvEKqdxuuXXXXXXX=";
    var authority = $"{instance}{tenant}";
    var authContext = new AuthenticationContext(authority);
    var credentials = new ClientCredential(clientID, secret);
    var authResult = await authContext.AcquireTokenAsync(resource, credentials);
    return authResult.AccessToken;
}
public static string PostJson(string token)
{
    Contact contact = new Contact()
    {
        givenName = "Pavel",
        surname = "Bansky"
    };
    contact.emailAddresses.Add(new emailAddresses()
    {
        address = "pavelb@doneitsoftware.com",
            name = "Pavel Bansky"
    });
    contact.businessPhones.Add("+1 732 555 0102");
    var jsonString = JsonConvert.SerializeObject(contact);
    string body = jsonString.ToString();
    HttpWebRequest hwr = (HttpWebRequest) WebRequest
        .CreateHttp("https://graph.microsoft.com/v1.0/me/contacts");
    hwr.Method = "POST";
    hwr.Headers.Add("Authorization", "Bearer " + token);
    hwr.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
    hwr.ContentType = "application/json";
    var postData = Encoding.UTF8.GetBytes(body.ToString());
    using(var stream = hwr.GetRequestStream())
    {
        stream.Write(postData, 0, postData.Length);
    }
    WebResponse response = null;
    try
    {
        response = hwr.GetResponse();
        using(Stream stream = response.GetResponseStream())
        {
            using(StreamReader sr = new StreamReader(stream))
            {
                return sr.ReadToEnd();
            }
        }
    }
    catch (Exception e)
    {
        throw e;
    }
}
[HttpGet]
public async Task<ActionResult<IEnumerable<string>>> GetAsync()
{
    Office365Manager office = new Office365Manager();
    string aa = await office.AcquireToken();
    Office365Manager.PostJson(aa.ToString());
    return new string[] { "value1", "value2" };
}

代码中的一个问题是使用错误的API,因为您使用客户端凭据流使用App的身份来获取访问令牌,因此您应该使用下面的API来创建联系人:

POST /users/{id | userPrincipalName}/contacts

我用对象测试您的代码:

 public class Contact {
        public string givenName { get; set; }
        public string surname { get; set; }

        public List<emailAddresses> emailAddresses { get; set; }
        public List<string> businessPhones { get; set; }
    }
    public class emailAddresses {
        public string address { get; set; }
        public string name { get; set; }
    }

它可以正常工作。请尝试修改API调用,如果仍然发生错误,请提供详细/内部错误消息。

最新更新