【问题标题】:SharePoint Web Service FileCreationInformation content string parameterSharePoint Web 服务 FileCreationInformation 内容字符串参数
【发布时间】:2017-11-07 13:01:23
【问题描述】:

我构建了我的第一个 post api,它传递了一个字符串参数。 字符串参数包含一些配置文本,应将其上传到样式库的子文件夹中。

要上传文件,我使用 FileCreationInformation,效果很好。 但是我不能使用字符串参数,因为我会得到如下异常:

angular.js:14642 Possibly unhandled rejection: {"data":{"Message":"An error has occurred.","ExceptionMessage":"Illegal characters in path.","ExceptionType":"System.ArgumentException","StackTrace":"   at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional)\r\n

这是控制器代码:

       [HttpPost]
    [Impersonation]
    [Route("default")]
    public void PostDefaultConfig ([FromBody]string config)
    {
        utility.SetDefaultConfig(config);
    }

方法代码:

               public DefaultConfig SetDefaultConfig(string config)
    {
        if (string.IsNullOrEmpty(config))
        {
            throw new ArgumentException("Config is invalid", nameof(config));
        }

        string myFile = @"D:\DATALOSS_WARNING_README.txt";
        string LibraryName = "Style Library";
        string siteUrl = "http://xxx/sites/dashboard-nick";
        using (ClientContext ctx = new ClientContext(siteUrl))
        {
            FileCreationInformation fcInfo = new FileCreationInformation
            {
                Url = Path.Combine("Style Library/SWITCOM.Dashboard/config/", Path.GetFileName(myFile)),
                Overwrite = true,
                Content = System.IO.File.ReadAllBytes(config)
            };

            Web myWeb = ctx.Web;
            List myLibrary = myWeb.Lists.GetByTitle(LibraryName);
            myLibrary.RootFolder.Files.Add(fcInfo);
            ctx.ExecuteQuery();
        };
        var test = new DefaultConfig
        {
            Response = "..."
        };
        return test;

    }

AngularJS 调用 http 请求如下:

            $http.post($scope.config.HTTP_SERVICE + $scope.config.POST_CONFIG_CHANGE, JSON.stringify(text)).then(function successCallback(response) {
            console.log('Erfolgreich!');
        });

文字是这样的:

"var config_data = angular.module('config', []).constant('CONFIG', {\n'PATH_STYLE_LIBRARY' : 'http://xxx/sites/dashboard',\n'PATH_MY_SITE' : 'http://xxx/my',\n'LANG' : 'ENU',\n'SEARCH_URL' : '../../search/Pages/siteresults.aspx',\n'TASKS_URL_ENU' : '/Pages/Tasks.aspx',\n'TASKS_URL_DEU' : '/Seiten/Tasks.aspx',\n'DEFAULT_SITE_IMG' : '../Style%20Library/SWITCOM.Dashboard/images/sharepoint.png',\n'ITEMS_PER_PAGE' : '15',\n'TASKS_LIST_URL_ENU' : '/Lists/Tasks',\n'TASKS_LIST_URL_DEU' : '/Lists/Aufgaben',\n'DOCUMENTS_URL_ENU' : '/Shared Documents',\n'DOCUMENTS_URL_DEU' : '/Freigegebene Dokumente',\n'CALENDAR_URL_ENU' : '/Lists/Calendar',\n'CALENDAR_URL_DEU' : '/Lists/Kalender',\n'CONTACTS_URL' : '/Lists/Contacts',\n'IMAGES_URL' : '/PublishingImages',\n'LINKS_URL' : '/Lists/Links',\n'RECYCLE_BIN_URL' : '/_layouts/15/RecycleBin.aspx',\n'HTTP_SERVICE' : 'http://xxx',\n'GET_BUSINESSAREA' : '/api/businessarea',\n'GET_SITES' : '/api/site',\n'POST_SITES' : '/api/siterequest',\n'GET_STORAGE' : '/api/site/storage',\n'GET_MEMBERS' : '/api/site/members',\n'GET_FOLDERS' : '/api/site/folders',\n'POST_CONFIG_CHANGE' : '/api/site/default',\n'NO_SENDING' : '0',\n'IS_SENDING' : '1',\n'SUC_SENDING' : '2',\n'ERR_DATES_SENDING' : '3',\n'ERR_SERVICE_SENDING' : '4',\n'TEAM_SITE' : 'TEAM-SITE',\n'PROJECT_SITE' : 'PROJECT-SITE',\n'LCID' : '1031',\n'TIMEZONEID' : '4'\n});"

我想使用字符串 config 作为我的内容,将它作为 xxx.js 上传到我的共享点。 如果不在本地硬盘上存储文件,这怎么可能?

【问题讨论】:

    标签: c# angularjs sharepoint


    【解决方案1】:

    我通过尝试和错误得到了一种解决方案。

    如果有人遇到相同或几乎相同的“问题”,这是我的解决方案。

    您必须添加编码,然后使用 MemoryStream 读取结果

    (例如):

    string configText = (string)config["Text"];
    byte[] byteArray = System.Text.Encoding.ASCII.GetBytes(configText);
    MemoryStream stream = new System.IO.MemoryStream(byteArray);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      相关资源
      最近更新 更多