.NET - заголовок размещения содержимого не отображается в WebAPI - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь создать WebAPI, который будет отправлять запрос GET на другой сервер (корпоративный Oracle Agile PLM) и возвращать документ.Я использую .NET 4.5.1.Я был в состоянии получить фактические данные файла, но мне было трудно получить исходное имя файла для него.Я читал, что заголовок Content-Disposition ответа является лучшим местом для поиска этого, поскольку он не включен в URI.

Вот то, что я сейчас пытаюсь и терплю неудачу.Теперь это не полностью, потому что я сфокусирован на попытке показать заголовок:

public string GetDocsForDocNumber()
    {
        var docUrlString = "https://agprd.myDomain.com/Agile/link/Information%20Systems/1044698/files/ALL";
        var username = "user";
        var password = "pass";

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(docUrlString);
        try
        {
            string authKey = Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(username + ":" + password)); 
            request.Headers.Add("Authorization", "Basic " + authKey);

            //DEBUG - Printing out all request headers...
            WebHeaderCollection whCollection2 = request.Headers;
            for (int i = 0; i < whCollection2.Count; i++)
            {
                System.Diagnostics.Debug.WriteLine("\n REQUEST header key: " + whCollection2.GetKey(i) + "    value: " + whCollection2.Get(i));
            }

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            using (Stream rstream = response.GetResponseStream())
            {
                //DEBUG -- Printing out all response headers...
                WebHeaderCollection whCollection = res.Headers;
                for (int i = 0; i < whCollection.Count; i++)
                {
                    System.Diagnostics.Debug.WriteLine("header key: " + whCollection.GetKey(i) + "    value: " + whCollection.Get(i) + "\n");
                }
            }
            res.Close();
        }
        catch { }

        return "blah";
    }

Вот заголовки, которые печатаются в VS:

 REQUEST header key: Authorization    value: Basic eWFAKeJaSEHnef2jk9hasE=  (this is fudged FYI)

 RESPONSE header key: Transfer-Encoding    value: chunked

 RESPONSE header key: Cache-Control    value: private

 RESPONSE header key: Content-Type    value: application/octet-stream

 RESPONSE header key: Date    value: Fri, 28 Sep 2018 18:38:15 GMT

 RESPONSE header key: Set-Cookie    value: JSESSIONID=GTF8bn1XvKPw1mQ1HJaejfejjaE3fNb0pTG5T15VVbwGlQ!331878993!-1921346355; path=/; HttpOnly,NSC_WTWS-BHQSE-443=ffffffffaf1cef7b419874afe8455e445a4a422d69;Version=1;path=/;secure

 RESPONSE header key: X-Powered-By    value: Servlet/3.0 JSP/2.2

I 'мы пробовали похожие вещи, используя WebClient, HTTPClient и т. д., и не можем увидеть это.Если я возьму этот URI и вставлю его в свой браузер, вот что показывает заголовок ответа:

Заголовок ответа браузера pic

Я не понимаю, почему его там неткогда я делаю запрос из WebAPI.Я могу сделать тот же запрос из приложения для iOS, и он отлично работает.Опять же, я могу просто получить фактические данные документа, но я не могу получить имя файла, потому что этот заголовок - MIA.

Есть идеи?Я довольно новичок в этом, поэтому я надеюсь, что это что-то глупое и легкое.

Спасибо

1 Ответ

0 голосов
/ 28 сентября 2018

Сервер oracle отправляет content-disposition только при наличии действительного user-agent подарка (браузеры автоматически отправляют заголовок агента пользователя).Сервер oracle, вероятно, делает это, потому что он предполагает, что вам не нужен заголовок content-disposition, если вы не браузер (браузеры используют заголовок content-disposition, чтобы знать, как обрабатывать определенные данные, возвращающиеся. То есть скачать этот файл, отобразить этоизображение и т. д.).

Поэтому добавьте заголовок user-agent самостоятельно, чтобы получить заголовок content-disposition.

...