ich zur Zeit auf eine ‚Download-Datei‘ Implementierung arbeite, die NICHT gespeichert heruntergeladen werden können in der Datenbank sind, I Ich gebe den vollständigen Dateipfad als Parameter für die Identifizierung ein.Zulassen vollständigen Dateipfad in URI für Web-API-Aufruf
Es scheint das Problem mit diesem Ansatz ist, dass der Dateipfad Zeichen enthält, die für einen URI ungültig sind ... Hat jemand Vorschläge, um diese oder einen alternativen Ansatz zu lösen?
Datei herunterladen Methode:
[HttpGet]
[Route("Files/{*filePath}")]
public HttpResponseMessage Get([FromUri]string filePath)
{
try
{
var file = new FileInfo(filePath);
byte[] bytes = System.IO.File.ReadAllBytes(filePath);
var result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new ByteArrayContent(bytes);
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = file.Name + file.Extension;
return result;
}
catch(Exception ex)
{
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
}
}
Danke für die ausführliche Antwort, Chris! Einige sehr gute/nützliche Punkte, die Sie dort vorgestellt haben. Ein Problem mit Ihrem Vorschlag besteht darin, die Datenbank auf dem neuesten Stand zu halten ... Wenn neue Dateien zum Quellordner hinzugefügt, verschoben oder gelöscht werden, muss die Datenbank manuell aktualisiert werden ... – Tomuke
Abhängig von der Art und Menge der API Kunden, die eine gute Sache sein könnten - z Wenn Sie 50 API-Clients haben und eine Datei verschoben haben, möchten Sie lieber 50 Clients oder einen Datenbankeintrag aktualisieren?Wenn Sie Ihre Frage mit mehr Informationen über die Client-Server-Beziehung aktualisieren können (wie viele Clients, wie erhalten sie Wissen, welchen Pfad Sie in die API-URI eingeben sollen usw.), wäre es hilfreich, eine bessere Antwort zu präsentieren. –