public static async Task<byte[]> SendODataHttpRequestWithCanary(Uri uri, HttpMethod method, Stream requestContent, string contentType, HttpClientHandler clientHandler, SPOAuthUtility authUtility, Dictionary<string, string> headers = null) { // Make a post request to {siteUri}/_api/contextinfo to get the canary var response = await HttpUtility.SendODataJsonRequest( new Uri(String.Format("{0}/_api/contextinfo", SPOAuthUtility.Current.SiteUrl)), HttpMethod.Post, null, clientHandler, SPOAuthUtility.Current); Dictionary<String, IJsonValue> dict = new Dictionary<string, IJsonValue>(); HttpUtility.ParseJson(JsonObject.Parse(Encoding.UTF8.GetString(response, 0, response.Length)), dict); string canary = dict["FormDigestValue"].GetString(); // Make the OData request passing the canary in the request headers return await HttpUtility.SendODataHttpRequest( uri, method, requestContent, contentType, clientHandler, SPOAuthUtility.Current, new Dictionary<string, string> { { "X-RequestDigest", canary } }); }
public static async Task<bool> Create(Uri spSiteUrl, string username, string password) { var utility = new SPOAuthUtility(spSiteUrl, username, password); CookieContainer cc = await utility.GetCookieContainer(); var cookies = from Cookie c in cc.GetCookies(spSiteUrl) where c.Name == "FedAuth" select c; if (cookies.Count() > 0) { current = utility; return true; } else throw new Exception("Could not retrieve Auth cookies"); }
/// <summary> /// Sends a JSON OData request appending SPO auth cookies to the request header. /// </summary> public static async Task<byte[]> SendODataJsonRequest(Uri uri, HttpMethod method, Stream requestContent, HttpClientHandler clientHandler, SPOAuthUtility authUtility, Dictionary<string, string> headers = null) { if (clientHandler.CookieContainer == null) clientHandler.CookieContainer = new CookieContainer(); //CookieContainer cookieContainer = await authUtility.GetCookieContainer(); //foreach (Cookie c in cookieContainer.GetCookies(uri)) //{ // clientHandler.CookieContainer.Add(uri, c); //} return await SendHttpRequest( uri, method, requestContent, "application/json;odata=verbose;charset=utf-8", clientHandler, headers); }
public static async Task<byte[]> SendODataHttpRequest(Uri uri, HttpMethod method, Stream requestContent, string contentType, HttpClientHandler clientHandler, SPOAuthUtility authUtility, Dictionary<string, string> headers = null) { if (clientHandler.CookieContainer == null) clientHandler.CookieContainer = new CookieContainer(); CookieContainer cookieContainer = await authUtility.GetCookieContainer(); foreach (Cookie c in cookieContainer.GetCookies(uri)) { clientHandler.CookieContainer.Add(uri, c); } return await SendHttpRequest( uri, method, requestContent, contentType, clientHandler, headers); }