2016-11-22 5 views
0

In unserem Intranet habe ich einen Server, der für die Speicherung von Dateien zuständig ist. Anfänglich musste der Server nur in einer Intranetumgebung betrieben werden, aber jetzt müssen Dateien mit externen Webanwendungen geteilt werden. Es ist keine Option, diesen Server über das Internet zugänglich zu machen.Verwenden von WebClient zum Abrufen von Intranet-Dateien

Ich möchte eine ASP.NET MVC-Lösung erstellen, die den WebClient verwendet, um diese Dateien vom Intranetserver abzurufen und über FileResult der externen App an den Benutzer zurückzusenden. Dieser Client erhält benutzerdefinierte Anmeldeinformationen für Domänenbenutzer. Bisher habe ich versucht, eine CredentialCache Klasse zu erstellen, die richtigen Anmeldeinformationen festgelegt und hängen Sie ihn an WebClients Credentials Eigenschaft wie im folgenden Code:

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); 
} 

Nach der entsandten Frage in Domain credentials for a WebClient class don't work sollte es funktionieren, aber es ist nicht. Es läuft nur, wenn ich das Problem auf localhost ausführe, aber wenn ich meine Lösung auf einem Testserver veröffentliche, gibt es 401 Fehler zurück. Meine Frage ist, wie man das funktioniert? Und ist es möglich, Dateien über diese Methode herunterzuladen?

UPDATE --- Ich habe meine Test-App auf einem anderen Server veröffentlicht und es begann zu arbeiten. Jetzt befindet sich die Test-App auf einem anderen Server als der Server, auf dem Dateien gespeichert sind. Irgendwelche Ideen, warum es nicht funktioniert, wenn beide auf der gleichen Maschine sind?

Antwort

0

401 Fehler ist nicht autorisiert, daher hängt das Problem möglicherweise mit Berechtigungen zusammen. Sind Sie sicher, dass das Benutzerkonto, mit dem Sie sich in diesem Ordner anmelden, den richtigen Zugriff hat?

+0

Ja bin ich sicher. Jeder Benutzer in der Domäne hat Zugriff auf alle Dateien. Es spielt also keine Rolle, welches Konto ich verwende. –

Verwandte Themen