Как скачать файл и сразу же передать его клиенту в ASP.NET? - PullRequest
1 голос
/ 23 июня 2009

В основном мне нужно обслуживать файлы из местоположения, которое требует проверки подлинности Windows. Вместо того чтобы иметь дело с моим клиентом напрямую, я хотел бы реализовать процесс, чтобы они могли просто загружать файлы, как если бы они были на моем сервере, после того, как они, конечно, вошли в мою систему. Вот то, что у меня есть, и кажется, что оно работает неправильно:

// Create the request
WebRequest request = HttpWebRequest.Create(button.CommandArgument);
request.Credentials = new NetworkCredential(_username,_password);


// Get the response
WebResponse response = request.GetResponse();
StreamReader responseStream = new StreamReader( response.GetResponseStream());

// Send the response directly to output
Response.ContentEncoding = responseStream.CurrentEncoding;
Response.ContentType = request.ContentType;
Response.Write(responseStream.ReadToEnd());
Response.End();

Когда я пытаюсь это сделать, я могу просмотреть файл, но что-то не так с кодировкой или типом содержимого, и, например, PDF будет содержать 16 пустых страниц (вместо 16 страниц текста).

Есть идеи, что мне не хватает?

Не стесняйтесь менять заголовок этого вопроса, если есть лучший способ сформулировать этот вопрос

Обновление: Попробовал два ответа ниже, но безуспешно. Теперь я думаю, что с типом контента и кодировкой все в порядке, но, возможно, аутентификация не удалась? Длина содержимого намного меньше, чем должна быть на самом деле ... Использую ли я неверный метод для проверки подлинности Windows?

Ответы [ 3 ]

1 голос
/ 23 июня 2009

В зависимости от того, как / что у вас есть. Я бы сделал несколько вещей.

Response.Clear() в первую очередь для удаления всего, что могло быть визуализировано.

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

1 голос
/ 23 июня 2009

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

Response.ContentType = request.ContentType;

до:

Response.ContentType = response.ContentType;
0 голосов
/ 23 июня 2009

Если ваша проблема связана с сетевыми учетными данными, вы можете попробовать другой подход. Если вы предоставляете HTTP-доступ к идентификатору, который использует пул приложений веб-сайта, вы можете избежать указания учетных данных имени пользователя / пароля в запросе. Это также дает вам дополнительное преимущество: нет необходимости хранить где-нибудь пароль.

...