Как выполнить два зависимых URL-адреса odata в одном сеансе из кода C # - PullRequest
1 голос
/ 04 апреля 2019

Мне нужно вызвать два оддата URL sap из кода C #. Первый URL-адрес задает фильтры, а второй URL-адрес (общий URL-адрес) - фактический ответ.

Первый URL:

https://<>/sap/opu/odata/SALM/TM_SERVICE/setFilters?sap-language=EN&filter='2%2Ctime%3D%E2%80%8E4%E2%80%8E%2F%E2%80%8E1%E2%80%8E%2F%E2%80%8E2019%E2%80%8E%20%E2%80%8E10%E2%80%8E%3A%E2%80%8E31%E2%80%8E%3A%E2%80%8E24%E2%80%8E%20%E2%80%8EAMc%3ATest%20Suite%20for%20Focused%20Build%2Cw%3A%2CT%3D<>'

Второй URL:

https://<>//sap/opu/odata/SALM/TM_SERVICE/TILECollection(ConfigID='1%20',PageID='2%20',TileID='8%20')?$format=json&sap-language=EN

Второй URL-адрес является общим и постоянным URL-адресом, но после первого выполнения первого URL-адреса с другими значениями параметров второй URL-адрес даст другой ответ.

В браузере я могу выполнить эти два URL и увидеть разницу в ответах с разными значениями параметров.

Нужен код C # для имитации поведения браузера. В коде C # второй URL-адрес является постоянным и не изменяется.

Пробовал с использованием следующего: WebRequest, HttpWebRequest, HttpClient, WebClient вместе с передачей cookie (cookie, полученный от первого ответа, передается в Request при выполнении второго URL)

var httpClientHandler = new HttpClientHandler()
                    {
                        Credentials = credential,
                        CookieContainer = cookieContainer
                    };

                    using (HttpClient client = new HttpClient(httpClientHandler))
                    {
                        using (HttpResponseMessage response = client.GetAsync("<<first url>>").Result)
                        {
                            Uri uri = new Uri(string.Format(ConfigurationManager.AppSettings["TestPlanSetFilters"], s));
                            IEnumerable<Cookie> responseCookies = cookieContainer.GetCookies(uri).Cast<Cookie>();
                            foreach (Cookie cookie in responseCookies)
                            {
                                cookieContainer.Add(cookie);
                            }
                        }

                            using (HttpResponseMessage response1 = client.GetAsync("<<second url>>").Result)
                            {
                                using (HttpContent content1 = response1.Content)
                                {
                                    var json2 = content1.ReadAsStringAsync().Result;
                             }                            
                        }                        

                    }
...