Попытка доступа к документам Appian с использованием C # и веб-API - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь написать программу на C # для интеграции моих дел Appian с внешней системой управления записями электронных документов (EDRMS).

Программа должна загрузить документы, которые были загружены для каждого случая в Appianа затем убедитесь, что они загружены в EDRMS с помощью веб-сервисов.

Я написал Appian Web-api, который я могу использовать для входа и получения списка документов для каждого случая, поэтому язнать, где в EDRMS мне нужно поместить документы.

Документы доступны [с помощью веб-браузера] с таким URL-адресом: https://myappiansite.appiancloud.com/suite/doc/123456

Если я перехожу по этому URL-адресуиспользуя мой веб-браузер, он сразу же загружает файл.

Однако, если я пытаюсь подключиться к этому URL-адресу программно из моей программы на C #, то, что я получаю, когда я [пытаюсь] открыть поток файла, этонекоторый HTML-код целевой страницы по умолчанию, а не содержимое документа.

Код, который я пишу, выглядит следующим образом:

        HttpWebRequest MyRequest = (HttpWebRequest)WebRequest.Create("https://myappiansite.appiancloud.com/suite/doc/123456?signin=native");
        MyRequest.Timeout = 10000; // 10 seconds

        CredentialCache credentialCache = new CredentialCache();
        credentialCache.Add(new System.Uri("https://myappiansite.appiancloud.com/suite/doc/123456?signin=native"),
                            "Basic",
                            new NetworkCredential("myAppianUsername",
                                                  "myAppainPassword"));

        MyRequest.Credentials = credentialCache; 
        MyRequest.PreAuthenticate = true;

        // Get the web response
        HttpWebResponse MyResponse = (HttpWebResponse)MyRequest.GetResponse();

        if (HttpStatusCode.OK == MyResponse.StatusCode)
        {
            int chunkSize = 524288;
            using (FileStream fs = new FileStream("C:\temp\myNewFile.doc", FileMode.Create))
            {
                using (Stream MyResponseStream = MyResponse.GetResponseStream())
                {
                    BinaryReader br = new BinaryReader(MyResponseStream);
                    byte[] data;
                    Boolean lastChunk = false;

                    do
                    {
                        data = br.ReadBytes(chunkSize);
                        if (data == null || data.Length == 0 || data.Length < chunkSize)
                        {
                            lastChunk = true;
                        }
                        if (data != null)
                        {
                            fs.Write(data, 0, data.Length);
                        }
                   }
                   while (!lastChunk);
                   br.Close();
                }//using MyResponseStream
            } // Using fs
        }

Но когда этот код hПри запуске документ «C: \ temp \ myNewFile.doc» просто содержит HTML-код нашей главной целевой страницы.

Любые мысли о том, почему при просмотре https://myappiansite.appiancloud.com/suite/doc/123456 будет загружен документ, но кодвыше просто получает HTML-код целевой страницы?

[Обратите внимание, что пользователь "myAppianUsername" является пользователем, не являющимся пользователем saml, тогда как обычно вход в систему осуществляется с использованием учетной записи, подключенной к AD через SAML. Если я удаляю «? Signin = native» из URL, то загружаемый файл содержит HTML-код для входа в SAML]

спасибо,

David.

1 Ответ

0 голосов
/ 09 октября 2019

Я выяснил, в чем проблема - оказалось, что в Appian встроены ограничения безопасности, которые не позволяют приложениям использовать URL-адрес "https://myappiansite.appiancloud.com/suite/doc/123456" для загрузки документов. Мне пришлось создать отдельную сеть-api для этого. К счастью, Appian предоставляет шаблон / мастер web-api для загрузки документов, который генерирует api для вас.

Итак, с помощью мастера загрузки web-api для документов создайте web-API под названием "DownloadMyFile ", я смог использовать код без изменений, с веб-API:

https://myappiansite.appiancloud.com/suite/webapi/DownloadMyFile/12345

Единственные незначительные изменения, которые я должен был сделать, былодобавить дополнительные типы документов в белый список.

...