public async Task <object> CreateFolder(FolderModel folder)
        {
            var configuration = new HttpConfiguration();
            var request       = new HttpRequestMessage();

            request.SetConfiguration(configuration);
            try
            {
                SharePointResponse sharePointToken = await GetSharepointToken();

                if (sharePointToken != null)
                {
                    RequestModel requestModel = createRequests.CreateSharePointFolderValues(folder);
                    if (requestModel != null)
                    {
                        requestModel.token = sharePointToken.access_token;
                        await createRequests.POSTAsync(requestModel);

                        return(request.CreateResponse(HttpStatusCode.OK, "Successfully Created Folder " + folder.FolderName));
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                return(new HttpResponseMessage(HttpStatusCode.InternalServerError));
            }
        }
        public async Task <SharePointResponse> GetFormDigest()
        {
            var configuration = new HttpConfiguration();
            var request       = new HttpRequestMessage();

            request.SetConfiguration(configuration);
            try
            {
                SharePointResponse sharePointToken = await GetSharepointToken();

                if (sharePointToken != null)
                {
                    RequestModel requestModel = createRequests.CreateSharePointFormDigestRequestValues();
                    if (requestModel != null)
                    {
                        requestModel.token = sharePointToken.access_token;
                        string formDigestResult = (string)await createRequests.POSTAsync(requestModel);

                        string[] formDigest = formDigestResult.Split('\"');
                        for (var i = 0; i < formDigest.Length; i++)
                        {
                            if (formDigest[i].Equals("FormDigestTimeoutSeconds"))
                            {
                                sharePointToken.formDigestTimeout = int.Parse(formDigest[i + 1].Replace(":", "").Replace(",", ""));
                            }
                            if (formDigest[i].Equals("FormDigestValue"))
                            {
                                sharePointToken.formDigestValue = formDigest[i + 2];
                                break;
                            }
                        }
                        return(sharePointToken);
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                return(null);
            }
        }
        public async Task <object> DownloadFile(FolderModel folder)
        {
            var configuration = new HttpConfiguration();
            var request       = new HttpResponseMessage();

            try
            {
                SharePointResponse sharePointToken = await GetSharepointToken();

                if (sharePointToken != null)
                {
                    RequestModel requestModel = createRequests.DownloadFileContentSharePointValues(folder);
                    if (requestModel != null)
                    {
                        requestModel.token     = sharePointToken.access_token;
                        requestModel.fileNames = new List <string>
                        {
                            folder.fileName
                        };

                        var dataBytes = await createRequests.GETAsync(requestModel);

                        //adding bytes to memory stream
                        var dataStream = new MemoryStream((byte[])dataBytes);

                        request         = Request.CreateResponse(HttpStatusCode.OK, "Successfully Downloaded File " + folder.fileName);
                        request.Content = new StreamContent(dataStream);
                        request.Content.Headers.ContentDisposition          = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
                        request.Content.Headers.ContentDisposition.FileName = folder.fileName;
                        request.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");

                        return(request);
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                return(new HttpResponseMessage(HttpStatusCode.InternalServerError));
            }
        }
        public async Task <object> FolderExits(FolderModel folder)
        {
            var configuration = new HttpConfiguration();
            var request       = new HttpRequestMessage();

            request.SetConfiguration(configuration);
            try
            {
                SharePointResponse sharePointToken = await GetSharepointToken();

                if (sharePointToken != null)
                {
                    RequestModel requestModel = createRequests.FolderExistsSharePointValues(folder);
                    if (requestModel != null)
                    {
                        requestModel.token = sharePointToken.access_token;
                        string responses = (string)await createRequests.GETAsync(requestModel);

                        string[] response = responses.Split('\"');
                        for (var i = 0; i < response.Length; i++)
                        {
                            if (response[i].Contains("ListItemAllFields"))
                            {
                                return(null);
                            }
                        }
                        return(responses);
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                return(null);
            }
        }
예제 #5
0
        /// <summary>
        /// Description : A Commmon Method that creates POST Requests based on Different
        ///               Need that will be called with the appropriate details
        /// </summary>
        /// <param name="credentials"></param>
        /// <returns>The appropriate result which could range from token value/form digest value</returns>
        public async Task <object> POSTAsync(RequestModel credentials)
        {
            using (HttpClient client = new HttpClient())
            {
                HttpContent content;
                if (credentials.body != null && credentials.type == 1) //Type 1 indicates that the POST Request will be for Creating a Folder
                {
                    //This Section Creates a POST Request for Creating a Folder on Shared Documents

                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", credentials.token);
                    MediaTypeWithQualityHeaderValue acceptHeader = MediaTypeWithQualityHeaderValue.Parse("application/json;odata=verbose;charset=utf-8");
                    client.DefaultRequestHeaders.Accept.Add(acceptHeader);
                    content = new StringContent(credentials.body);
                    content.Headers.ContentType = acceptHeader;
                    var result = await client.PostAsync(credentials.URL, content);

                    if (credentials.body_2 != null)
                    {
                        for (var i = 0; i < credentials.body_2.Count; i++)
                        {
                            content = new StringContent(credentials.body_2[i]);
                            content.Headers.ContentType = acceptHeader;
                            await client.PostAsync(credentials.URL, content);
                        }
                    }
                    return(result);
                }
                else if (credentials.type == 2)  //Type 2 indicates that the POST Request will be for Form Digest Value
                {
                    //This Section Creates a POST Request for Getting the Form Digest Value

                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", credentials.token);
                    MediaTypeWithQualityHeaderValue acceptHeader = MediaTypeWithQualityHeaderValue.Parse("application/json;odata=verbose");
                    client.DefaultRequestHeaders.Accept.Add(acceptHeader);
                    content = null;
                    var result = await client.PostAsync(credentials.URL, content);

                    string resultContent = await result.Content.ReadAsStringAsync();

                    return(resultContent);
                }
                else if (credentials.type == 3)  //Type 3 indicates that the POST Request will be for Getting the Token
                {
                    //This Section Creates a POST Request for Retrieving a Token

                    content = new FormUrlEncodedContent(credentials.Values);
                    var result = await client.PostAsync(credentials.URL, content);

                    string resultContent = await result.Content.ReadAsStringAsync();

                    SharePointResponse tokenResponse = JsonConvert.DeserializeObject <SharePointResponse>(resultContent);
                    return(tokenResponse);
                }
                else if (credentials.type == 4)        //Type 4 indicates that the POST Request will be for Deleting a Folder on Shared Documents
                {
                    //This Section Creates a POST Request for Deleting a Folder

                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", credentials.token);
                    client.DefaultRequestHeaders.Add("X-RequestDigest", credentials.formDigestValue);
                    client.DefaultRequestHeaders.Add("X-HTTP-Method", "DELETE");
                    content = null;
                    var result = await client.PostAsync(credentials.URL, content);

                    return(result);
                }
                else if (credentials.type == 5)        //Type 5 indicates that the POST Request will be for Uploading a File to a Particular Folder on Shared Documents
                {
                    //This Section Creates a POST Request for Uploading a File to a Particular Folder
                    MultipartFormDataContent form;
                    HttpResponseMessage      result = new HttpResponseMessage();
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", credentials.token);
                    client.DefaultRequestHeaders.Add("X-RequestDigest", credentials.formDigestValue);
                    if (credentials.httpPostedFile != null)
                    {
                        for (int i = 0; i < credentials.httpPostedFile.Count; i++)
                        {
                            form = new MultipartFormDataContent
                            {
                                credentials.httpPostedFile[i]
                            };
                            result = await client.PostAsync(credentials.URLs[i], form);
                        }
                    }
                    return(result);
                }
                else                               //Type 7 indicates that the POST Request will be for Deleting a File from a Particular Folder on Shared Documents
                {
                    //This Section Creates a POST Request for Deleting a File from a Particular Folder
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", credentials.token);
                    client.DefaultRequestHeaders.Add("X-RequestDigest", credentials.formDigestValue);
                    client.DefaultRequestHeaders.Add("X-HTTP-Method", "DELETE");
                    content = null;
                    var result = await client.PostAsync(credentials.URL, content);

                    return(result);
                }
            }
        }
        public async Task <object> UploadFile()
        {
            var httpRequest                   = HttpContext.Current.Request;
            HttpFileCollection hfc            = httpRequest.Files;
            RequestModel       requestModel_2 = new RequestModel
            {
                httpPostedFile = new List <ByteArrayContent>()
            };

            if (httpRequest.Files.Count > 0)
            {
                for (int i = 0; i < hfc.Count; i++)
                {
                    HttpPostedFile FileUpload = hfc[i];        //Retrieves the File that is sent with the HTTP Request

                    int    FileLen = FileUpload.ContentLength; //Length of the File sent to be Uploaded
                    byte[] input   = new byte[FileLen];        //Initiliaze a Byte Array

                    // Initialize the stream.
                    Stream MyStream = FileUpload.InputStream;

                    // Read the file into the byte array.
                    MyStream.Read(input, 0, FileLen);
                    requestModel_2.httpPostedFile.Add(new ByteArrayContent(input));
                }
            }
            string folderName = httpRequest.Form["Folder_Name"];   // This is used to retrieve from the Request the Destination Folder Name
            string path       = httpRequest.Form["Path"];

            var configuration = new HttpConfiguration();
            var request       = new HttpRequestMessage();

            request.SetConfiguration(configuration);
            try
            {
                SharePointResponse sharePointToken = await GetFormDigest();

                if (sharePointToken != null)
                {
                    FolderModel folder = new FolderModel()
                    {
                        FolderName = folderName,
                        path       = path ?? null
                    };
                    folder.files = new List <string>();
                    for (int i = 0; i < hfc.Count; i++)
                    {
                        folder.files.Add(hfc[i].FileName);
                    }
                    RequestModel requestModel = createRequests.UploadFileSharePointValues(folder);
                    if (requestModel != null)
                    {
                        requestModel.token           = sharePointToken.access_token;
                        requestModel.formDigestValue = sharePointToken.formDigestValue;
                        requestModel.httpPostedFile  = requestModel_2.httpPostedFile;
                        requestModel.fileNames       = new List <string>();
                        for (int i = 0; i < hfc.Count; i++)
                        {
                            requestModel.fileNames.Add(hfc[i].FileName);
                        }
                        await createRequests.POSTAsync(requestModel);

                        string combindedFiles = string.Join(",", requestModel.fileNames);
                        return(request.CreateResponse(HttpStatusCode.OK, "Successfully Uploaded File(s) " + combindedFiles));
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                return(new HttpResponseMessage(HttpStatusCode.InternalServerError));
            }
        }
        public async Task <object> GetFolderContents(FolderModel folder)
        {
            var configuration = new HttpConfiguration();
            var request       = new HttpRequestMessage();

            request.SetConfiguration(configuration);
            try
            {
                if (FolderExits(folder) != null)       //Checks if the Folder exists before retrieving contents
                {
                    SharePointResponse sharePointToken = await GetSharepointToken();

                    if (sharePointToken != null)
                    {
                        RequestModel requestModel = createRequests.GetFolderContentSharePointValues(folder);
                        if (requestModel != null)
                        {
                            folder.fileCount   = folder.folderCount = 0;
                            folder.files       = new List <string>();
                            folder.SubFolders  = new List <string>();
                            requestModel.token = sharePointToken.access_token;
                            string responses = (string)await createRequests.GETAsync(requestModel);

                            string[] response     = responses.Split('@');
                            string[] fileResult   = response[0].Split('\"');
                            string[] folderResult = response[1].Split('\"');
                            for (var i = 0; i < fileResult.Length; i++)
                            {
                                if (fileResult[i].Contains("metadata"))
                                {
                                    folder.fileCount++;
                                }
                                if (fileResult[i].Contains("ServerRelativeUrl"))
                                {
                                    i += 2;
                                    string[] temp = fileResult[i].Split('/');
                                    folder.files.Add(temp[temp.Length - 1]);
                                }
                            }
                            for (var i = 0; i < folderResult.Length; i++)
                            {
                                if (folderResult[i].Contains("metadata"))
                                {
                                    folder.folderCount++;
                                }
                                if (folderResult[i].Contains("ServerRelativeUrl"))
                                {
                                    i += 2;
                                    string[] temp = folderResult[i].Split('/');
                                    folder.SubFolders.Add(temp[temp.Length - 1]);
                                }
                            }

                            return(folder);
                        }
                        else
                        {
                            throw new Exception();
                        }
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                return(null);
            }
        }