Umgang mit FileContentResult, wenn die Datei nicht gefunden wird
Habe ich eine controller-Aktion, die downloads einer Datei von einem azure-blob-basierend auf den container-Verweis-name (D. H. vollständigen Pfadnamen der Datei in das blob). Der code sieht ungefähr so aus:
public FileContentResult GetDocument(String pathName)
{
try
{
Byte[] buffer = BlobStorage.DownloadFile(pathName);
FileContentResult result = new FileContentResult(buffer, "PDF");
String[] folders = pathName.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
//get the last one as actual "file name" based on some convention
result.FileDownloadName = folders[folders.Length - 1];
return result;
}
catch (Exception ex)
{
//log error
}
//how to handle if file is not found?
return new FileContentResult(new byte[] { }, "PDF");
}
Den BlobStorage
Klasse es ist meine Hilfsklasse laden Sie die Streams aus dem blob.
Meine Frage ist vermerkt im code Kommentar: Wie soll ich damit umgehen das Szenario, wenn die Datei/stream wird nicht gefunden? Derzeit leite ich eine leere PDF-Datei, die ich fühle, ist nicht der beste Weg, es zu tun.
- Dies nennt man aus der Sicht via javascript.
- Was sollte der Datentyp auf der ajax-call? @Alex R könnten Sie auch zeigen, wie die ajax-Aufruf gemacht in der Ansicht, es wäre hilfreich.
- Die Frage ist bereits beantwortet. Sind Sie auch mit dem gleichen Problem? Der Aufruf von javascript ist einfach
window.location.href = "GetDocument?pathName=" + docPath;
. Aufrufen, werden die controller-action vor und reagieren entsprechend. - ja habe ich , ich bin nicht in der Lage, öffnen Sie die Datei meine Ansicht sieht so aus var options = { iframe: true, dataType: "html", url: "Upload/Previewfile" }; Vorschau-Datei ist ähnlich zu Ihrem GetDocument nach der Ausführung dieser ishould bekommen popup zu öffnen, die Datei aber ich bin nicht immer.Haben Sie eine Idee, oder soll ich den Beitrag als eine Frage? danke.
- Ja, besser, schicken Sie es als eine separate Frage. Das ist, wie es hier funktioniert. Ich werde froh sein zu helfen, wenn ich kann.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den richtigen Weg zu handle ein, die nicht in eine web-Applikation ist durch Rücksendung einen 404-HTTP-Statuscode an den client, welche in ASP.NET MVC-Begriffe übersetzt, die in der Rückkehr eine HttpNotFoundResult von Ihrem controller-action:
AH, Hoppla, gar nicht gemerkt, Sie waren immer noch auf ASP.NET MVC 2. Sie konnte es selbst implementieren, da
HttpNotFoundResult
wurde nur in ASP.NET MVC 3:HttpNotFoundResult
geerbt vonActionResult
? In diesem Fall ist die definition der Methode Aktion solltepublic ActionResult GetDocument(String pathName)
, Richtig?ActionResult
als return-Typ in Ihrer Unterschriften-Aktion. Ich habe auch aktualisiert, meine Antwort zu liefern, eine Beispiel-Implementierung derHttpNotFoundResult
.JsonResult
ich allein. Ja ich habe es bemerkt und +1.In ASP.NET Kern, verwenden Sie
NotFound()
Deine controller Erben müssen von
Controller
und die Methode muss zurückActionResult
Beispiel: