Содержимое веб-запроса-расположение отсутствует

#vb.net #webrequest

#vb.net #веб-запрос

Вопрос:

У меня возникла небольшая проблема, которая поставила меня в тупик.
Итак, это небольшая программа, которую я написал несколько лет назад во время обучения, с тех пор она безупречно выполняла свою работу вплоть до нескольких дней назад. По сути, просто создайте службу SOAP и загрузите файл.

 httpRequest = WebRequest.Create(My.Settings.RequestAddress)

Using httpResponse As WebResponse = httpRequest.GetResponse
    Using responseStream = New IO.StreamReader(httpResponse.GetResponseStream, StreamEncoding)

        Dim SourceFileName As String = GetSourceFileName(httpResponse.Headers.GetValues("content-disposition"))
        'httpResponse.Headers.GetValues("content-disposition") is returning nothing

        Dim StreamFileName As String = IO.Path.Combine("c:Temp", SourceFileName)
        Using StreamWrite = New IO.StreamWriter(StreamFileName, False, StreamEncoding)
            Do While Not responseStream.EndOfStream
                StreamWrite.WriteLine(responseStream.ReadLine)
            Loop
            StreamWrite.Flush()
        End Using
    End Using
End Using

Private Function GetSourceFileName(ByVal dispositionAttrib As String) As String
    Dim retVal As String = String.Empty
    Dim strArr As String() = Split(dispositionAttrib, "=")
    If strArr.Length > 1 Then
        retVal = strArr(1)
    End If
    Return retVal
End Function
  

По какой-либо причине, которую я не могу понять, атрибут заголовка «содержимое-расположение» не отображается.
Я могу совершать точно такие же вызовы через postman, и это есть. Прошли и проверили заголовок.Коллекция ключей также отсутствует, никаких признаков этого. Чего мне не хватает?

Обновление Просто в качестве пробной версии, изменил веб-запрос на HttpClient. По-прежнему отсутствует расположение содержимого

 Using client As New HttpClient()
    Dim response = client.GetAsync(My.Settings.RequestAddress).Result
    Dim fileNameAttribute = response.Headers.GetValues("content-disposition")
    Console.WriteLine(fileNameAttribute)
End Using
  

Ответ обновить.Значение заголовка, которое я получаю при просмотре через отладчик, равно:

{Pragma: длина содержимого без кэша: 27 Управление кэшем: тип частного содержимого: текст / html; кодировка = utf-8 Дата: Ср, 02 Сен 2020 20:45:37 GMT Истекает: Вт, 01 сен 2020 20:45:38 GMT Набор cookie: ASP.NET_SessionId=0kqeh5d1a2fni35chmbpibqv; путь =/; HttpOnly; SameSite= Lax Сервер: Microsoft-IIS /10.0 X-AspNet-Версия: 4.0.30319 X-Работает от: ASP.NET

}

Мне интересно об этой пустой строке внизу после X-Powered-By

Комментарии:

1. Headers.GetValues() возвращает массив строк, а не строку, и это не обязательно. Но, поскольку вы видите это в Postman… Прочитайте это как просто httpResponse.Headers("Content-Disposition") . Кроме того, измените dim httpRequest = WebRequest.CreateHttp(My.Settings.RequestAddress) и Using httpResponse As HttpWebResponse = DirectCast(httpRequest.GetResponse(), HttpWebResponse) — Как вы определили StreamEncoding перед чтением потока (вы сравнивали с httpResponse.CharacterSet )?

2. @Jimi, все правильные комментарии, но плохое кодирование в сторону. Изменен на HttpResponse. Заголовки («Расположение содержимого»), но по-прежнему ничего не возвращают. Что касается кодировки, честно говоря, не могу вспомнить, как я добрался до UTF-8, но это набор символов, который я получаю в ответе

3. Для всех, кто интересуется, по-прежнему нет решения для отсутствия «content-disposition», но с несколькими изменениями в восходящем потоке я переработал решение для использования имени временного файла, в котором, похоже, все работает снова