Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C删除SharePoint文件夹中的文件#_C#_Asp.net Mvc_Rest_Sharepoint - Fatal编程技术网

C# 使用C删除SharePoint文件夹中的文件#

C# 使用C删除SharePoint文件夹中的文件#,c#,asp.net-mvc,rest,sharepoint,C#,Asp.net Mvc,Rest,Sharepoint,我正在使用SharePoint excel Service操作excel文件,然后使用将其保存到共享文档文件夹 ExcelService.SaveWorkbookCopy() 现在我想删除我先前保存的那些文件。在Asp.NETMVC应用程序中使用C实现这一点的最佳方法是什么 我使用REST服务进行了尝试,但是我找不到任何教程,因为代码是现在的,我得到了一个WebException“远程服务器返回了一个错误:(403)禁止” 我为我的RESTURL尝试了两个版本,都不起作用 var fileS

我正在使用SharePoint excel Service操作excel文件,然后使用将其保存到共享文档文件夹

ExcelService.SaveWorkbookCopy()

现在我想删除我先前保存的那些文件。在Asp.NETMVC应用程序中使用C实现这一点的最佳方法是什么

我使用REST服务进行了尝试,但是我找不到任何教程,因为代码是现在的,我得到了一个WebException“远程服务器返回了一个错误:(403)禁止” 我为我的RESTURL尝试了两个版本,都不起作用

var fileSavePath = "http://sharepointserver/Collaboration/workrooms/MyWebSiteName/Shared%20Documents/";
var excelRestPath_1 = "http://sharepointserver/Collaboration/workrooms/MyWebSiteName/_api/web/";
var excelRestPath_2 = "http://sharepointserver/_api/web/";

    public static bool DeleteExcelFromSharepoint(int id, string excelRestPath)
    {
        try
        {
            string filePath = "/Shared%20Documents/" + id + ".xlsm";
            string url = excelRestPath + "GetFileByServerRelativeUrl('" + filePath + "')";

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "DELETE";
            request.Headers.Add(HttpRequestHeader.IfMatch, "*");
            request.Headers.Add("X-HTTP-Method", "DELETE");

            request.Credentials = System.Net.CredentialCache.DefaultCredentials;

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    throw new ApplicationException(String.Format("DELETE failed. Received HTTP {0}", response.StatusCode));
                }
                return true;
            }

        }
        catch (Exception ex)
        {
            CustomLogger.Error("Error deleting Excel from Sharepoint", ex);
            return false;
        }
    }

使用nuget package
Microsoft.SharePointOnline.CSOM

using (var sp = new ClientContext("webUrl"))
{
    sp.Credentials =  System.Net.CredentialCache.DefaultCredentials;
    sp.Web.GetFileByServerRelativeUrl(filePath).DeleteObject();
    sp.ExecuteQuery();
}
这将确保文件被删除-如果要确保文件在删除过程中存在:

using (var sp = new ClientContext("webUrl"))
{
    sp.Credentials =  System.Net.CredentialCache.DefaultCredentials;
    var file = sp.Web.GetFileByServerRelativeUrl(filePath);
    sp.Load(file, f => f.Exists);
    file.DeleteObject();
    sp.ExecuteQuery();
    if (!file.Exists)
        throw new System.IO.FileNotFoundException();
}

如果您使用的是REST,可以参考链接 ()

我的示例代码是:

string resourceUrl = "https://<BaseURL>/sites/<SubSite>/_api/web/GetFileByServerRelativeUrl('/sites/<SubSite>/Documents/New Folder/xyz.docx')";            

        var wreq = WebRequest.Create(resourceUrl) as HttpWebRequest;
        wreq.Headers.Remove("X-FORMS_BASED_AUTH_ACCEPTED");
        wreq.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
    wreq.Headers.Add("X-HTTP-Method", "DELETE");
        //wreq.Headers.Add("Authorization", "Bearer " + AccessToken);
        wreq.UseDefaultCredentials = true;
        wreq.Method = "POST";
        wreq.Accept = "application/json; odata=verbose";
        wreq.Timeout = 1000000;
        wreq.AllowWriteStreamBuffering = true;
        wreq.ContentLength = 0;
        string result = string.Empty;
        string JsonResult = string.Empty;
        try
        {
            WebResponse wresp = wreq.GetResponse();}
        catch (Exception ex)
        {
            LogError(ex);
            result = ex.Message;
        }
string resourceUrl=”https:///sites//_api/web/GetFileByServerRelativeUrl('/sites//Documents/New Folder/xyz.docx')”;
var wreq=WebRequest.Create(resourceUrl)作为HttpWebRequest;
wreq.Headers.Remove(“基于X-FORMS的验证已接受”);
wreq.Headers.Add(“X-FORMS_-BASED_-AUTH_-ACCEPTED”,“f”);
wreq.Headers.Add(“X-HTTP-Method”,“DELETE”);
//wreq.Headers.Add(“授权”、“承载人”+访问令牌);
wreq.UseDefaultCredentials=true;
wreq.Method=“POST”;
wreq.Accept=“application/json;odata=verbose”;
wreq.Timeout=1000000;
wreq.AllowWriteStreamBuffering=true;
wreq.ContentLength=0;
字符串结果=string.Empty;
string JsonResult=string.Empty;
尝试
{
WebResponse wresp=wreq.GetResponse();}
捕获(例外情况除外)
{
对数误差(ex);
结果=例如消息;
}

尝试了上面的答案,但仍然没有删除文件,我发现这个方法非常有效

var request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(“FullSharePointURIofDocument“);
request.Timeout = System.Threading.Timeout.Infinite;
request.Credentials = new 
System.Net.NetworkCredential(“SharePointUser“,”SharePointUserPassword“);
request.Method = “DELETE“;
var response = (System.Net.HttpWebResponse)request.GetResponse();

谢谢

谢谢,看起来很棒。虽然我创建了这些文件,但我还是尝试了它,并得到了一个UnauthorizedAccessException。我是否必须激活SharePoint上的某些特殊功能才能删除文件?在这种情况下,使用默认凭据通常不起作用,您可能需要使用Microsoft.SharePoint.Client.SharePointOnlineCredentials或System.Net.NetworkCredential。如果需要传递用户权限,请使用OAuth.Good add,方法是指定必须将站点和子站点添加到relativeURL。我花了一点时间才找到。以下是另一个供参考的链接: