Autodesk.DesignAutomation возвращает неожиданный токен S в JSON в позиции 0 при вызове API рабочего элемента - PullRequest
0 голосов
/ 01 февраля 2020

Я столкнулся с новой проблемой с извлечением

handleSendToForge(e) {
        e.preventDefault();


        let formData = new FormData();
        formData.append('data', JSON.stringify({
            Width: this.state.Width,
            Length: this.state.Length,
            Depth: this.state.Depth,
            Thickness: this.state.Thickness,
            BottomThickness: this.state.BottomThickness,
            rebarSpacing: this.state.rebarSpacing,
            outputrvt: this.state.outputrvt,
            bucketId: this.state.bucketId,
            activityId: 'RVTDrainageWebappActivity',
            objectId: 'template.rvt'
        }));

        this.setState({
            form: formData
        })


        fetch('designautomation', {
            method: 'POST',
            body: formData,
            //headers: {
            //    //'Content-Type': 'application/json'
            //    'Content-Type': 'application/x-www-form-urlencoded',
            //},
        })
            .then(response => response.json())
            .then(data => { console.log(data) })
            .catch(error => console.log(error));
    }

, и код для контроллера довольно стандартный и немного изменен по сравнению с одним из примеров кузницы

[HttpPost]
        [Route("designautomation")]
        public async Task<IActionResult> Test([FromForm] StartWorkitemInput input)
        {

            JObject workItemData = JObject.Parse(input.data);
            double Width = workItemData["Width"].Value<double>();
            double Length = workItemData["Length"].Value<double>();
            double Depth = workItemData["Depth"].Value<double>();
            double Thickness = workItemData["Thickness"].Value<double>();
            double BottomThickness = workItemData["BottomThickness"].Value<double>();
            double rebarSpacing = workItemData["rebarSpacing"].Value<double>();
            string outputrvt = workItemData["outputrvt"].Value<string>();
            string activityId = workItemData["activityId"].Value<string>();
            string bucketId = workItemData["bucketId"].Value<string>();
            string objectId = workItemData["objectId"].Value<string>();

            // basic input validation
            string activityName = string.Format("{0}.{1}", NickName, activityId);
            string bucketKey = bucketId;
            string inputFileNameOSS = objectId;

            // OAuth token
            dynamic oauth = await OAuthController.GetInternalAsync();

            // prepare workitem arguments
            // 1. input file
            dynamic inputJson = new JObject();
            inputJson.Width = Width;
            inputJson.Length = Length;
            inputJson.Depth = Depth;
            inputJson.Thickness = Thickness;
            inputJson.BottomThickness = BottomThickness;
            inputJson.rebarSpacing = rebarSpacing;
            inputJson.outputrvt = outputrvt;

            XrefTreeArgument inputFileArgument = new XrefTreeArgument()
            {
                Url = string.Format("https://developer.api.autodesk.com/oss/v2/buckets/aecom-bucket-demo-library/objects/{0}", objectId),
                Headers = new Dictionary<string, string>()
                {
                    { "Authorization", "Bearer " + oauth.access_token }
                }
            };

            // 2. input json
            XrefTreeArgument inputJsonArgument = new XrefTreeArgument()
            {
                Headers = new Dictionary<string, string>()
                {
                    {"Authorization", "Bearer " + oauth.access_token }
                },
                Url = "data:application/json, " + ((JObject)inputJson).ToString(Formatting.None).Replace("\"", "'")
            };

            // 3. output file
            string outputFileNameOSS = outputrvt;
            XrefTreeArgument outputFileArgument = new XrefTreeArgument()
            {
                Url = string.Format("https://developer.api.autodesk.com/oss/v2/buckets/{0}/objects/{1}", bucketKey, outputFileNameOSS),
                Verb = Verb.Put,
                Headers = new Dictionary<string, string>()
                {
                    {"Authorization", "Bearer " + oauth.access_token }
                }
            };

            // prepare & submit workitem
            // the callback contains the connectionId (used to identify the client) and the outputFileName of this workitem
            //string callbackUrl = string.Format("{0}/api/forge/callback/designautomation?id={1}&bucketKey={2}&outputFileName={3}", OAuthController.FORGE_WEBHOOK_URL, browerConnectionId, bucketKey, outputFileNameOSS);
            WorkItem workItemSpec = new WorkItem()
            {
                ActivityId = activityName,
                Arguments = new Dictionary<string, IArgument>()
                {
                    { "rvtFile",  inputFileArgument },
                    { "jsonFile",  inputJsonArgument },
                    { "result",  outputFileArgument }
                    ///{ "onComplete", new XrefTreeArgument { Verb = Verb.Post, Url = callbackUrl } }
                }
            };

            DesignAutomationClient client = new DesignAutomationClient();
            client.Service.Client.BaseAddress = new Uri(@"http://localhost:3000");


            WorkItemStatus workItemStatus = await client.CreateWorkItemAsync(workItemSpec);

            return Ok();
        }

Любой Идея, почему дает мне эту ошибку? Я проверил API с помощью почтальона, и он работает нормально, но когда я пытаюсь вызвать это с кнопки, я получаю эту ошибку. При запуске отладки кажется, что URL написан правильно. Может быть, это очень простая вещь, которую мне не хватает. Ура!

1 Ответ

0 голосов
/ 02 февраля 2020

OK решено ... Я не смог добавить службу в автозагрузку, а также информацию о соединении Forge (clientid, clientsecret) в настройках приложения. json

Теперь мне нужно протестировать AWS развертывание, и я думаю, что я закончил!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...