В нашей сети я интранет-сервер, который отвечает за хранение файлов. Первоначально сервер должен был работать только в среде интрасети, но теперь необходимо обмениваться файлами с внешними веб-приложениями. Сделать доступ к этому серверу из Интернета не представляется возможным.Использование WebClient для получения файлов интрасети
Я хочу создать решение ASP.NET MVC, которое использует WebClient для получения этих файлов с сервера интрасети и отправки их пользователю через FileResult внешнего приложения. Этому клиенту будут предоставлены пользовательские учетные данные пользовательского домена. До сих пор я пытался создать класс CredentialCache, установить правильные учетные данные и добавить его в веб-клиентов Credentials свойства, как показано в следующем коде:
public ActionResult Download(int id, string fileName)
{
var fileService = new FilesService();
var documentUrl = fileService.GetUrlFileByFileId(id);
string filePath = "http://my.intranet.com/" + documentUrl;
var fileNameFromUrl = filePath.Substring(filePath.LastIndexOf("\\") + 1);
byte[] filedata;
CredentialCache cc = new CredentialCache();
cc.Add(new Uri("http://my.intranet.com/"),
"ntlm",
new NetworkCredential("myUserName", "myPassword", "myDomain"));
using (var client = new WebClient())
{
client.Credentials = cc;
filedata = client.DownloadData(filePath);
}
string contentType = MimeMapping.GetMimeMapping(filePath);
var cd = new ContentDisposition
{
FileName = fileName,
Inline = false
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(filedata, contentType);
}
По вопросу, публикуемую в Domain credentials for a WebClient class don't work он должен работать, но это не так. Он работает только в том случае, если я запускаю проблему на localhost, но когда я публикую свое решение на тестовом сервере, он возвращает ошибку 401. Мой вопрос - как это сделать? И можно ли загружать файлы с помощью этого метода?
UPDATE --- Я опубликовал свое тестовое приложение на другом сервере и начал работать. Теперь тестовое приложение находится на другом сервере, чем сервер, который хранит файлы. Любые идеи, почему он не работает, когда оба находятся на одной машине?
Да, я уверен. Каждый пользователь в домене имеет доступ ко всем файлам, поэтому не имеет значения, какую учетную запись я использую. –