La manipulation FileContentResult lorsque le fichier n'est pas trouvé
J'ai un contrôleur de l'action qui télécharge un fichier à partir d'un azure blob basée sur le conteneur nom de référence (c'est à dire nom de chemin complet du fichier dans la goutte). Le code ressemble à ceci:
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");
}
La BlobStorage
classe, ma classe helper télécharger le ruisseau de la goutte.
Ma question est indiqué dans le commentaire de code: Comment dois-je gérer le scénario quand le fichier/stream n'est pas trouvé? Actuellement, je suis passant à un vide de fichier PDF, ce qui me semble pas la meilleure façon de le faire.
Ceci est appelé à partir de la vue via javascript.
Quel doit être le type de données sur l'appel ajax? @Alex R pourriez-vous également de montrer comment l'appel ajax est faite dans la vue, il serait utile.
La question est déjà une réponse. Vous êtes aussi ayant le même problème? L'appel du javascript est tout simplement
oui je l'ai , je ne suis pas en mesure d'ouvrir le fichier de mon point de vue, ressemble à ceci var options = { iframe: true, dataType: "html", url: "Upload/Previewfile" }; fichier de prévisualisation est similaire à votre GetDocument après l'exécution de cette ishould obtenir contextuel pour ouvrir le fichier, mais je ne suis pas arriver.Avez-vous une idée ou je poste une question? merci.
Ouais, mieux poster comme une question distincte. Voilà comment cela fonctionne ici. Je serai heureux de vous aider si je le peux.
Quel doit être le type de données sur l'appel ajax? @Alex R pourriez-vous également de montrer comment l'appel ajax est faite dans la vue, il serait utile.
La question est déjà une réponse. Vous êtes aussi ayant le même problème? L'appel du javascript est tout simplement
window.location.href = "GetDocument?pathName=" + docPath;
. Qui va appeler le contrôleur de l'action ci-dessus et de répondre en conséquence.oui je l'ai , je ne suis pas en mesure d'ouvrir le fichier de mon point de vue, ressemble à ceci var options = { iframe: true, dataType: "html", url: "Upload/Previewfile" }; fichier de prévisualisation est similaire à votre GetDocument après l'exécution de cette ishould obtenir contextuel pour ouvrir le fichier, mais je ne suis pas arriver.Avez-vous une idée ou je poste une question? merci.
Ouais, mieux poster comme une question distincte. Voilà comment cela fonctionne ici. Je serai heureux de vous aider si je le peux.
OriginalL'auteur Alex R. | 2011-06-23
Vous devez vous connecter pour publier un commentaire.
La bonne façon de gérer un pas trouvé dans une application web est en retournant un code d'état HTTP 404 pour le client qui, en ASP.NET MVC termes se traduit par le retour d'un HttpNotFoundResult à partir de votre contrôleur de l'action:
Ah, zut, vous n'avez pas remarqué que vous étiez encore sur ASP.NET MVC 2. Vous pourriez mettre en œuvre vous-même parce que
HttpNotFoundResult
a été introduite uniquement dans ASP.NET MVC 3:HttpNotFoundResult
hérité deActionResult
? Dans ce cas, la définition de la méthode d'action devrait êtrepublic ActionResult GetDocument(String pathName)
, Droit?la droite. Je vous recommande de toujours utiliser
ActionResult
comme type de retour dans votre action de signatures. J'ai également mis à jour ma réponse à fournir un échantillon de la mise en œuvre deHttpNotFoundResult
.Merci bien, j'ai l'habitude d'utiliser le niveau supérieur dans de tels cas que cette question, mais si j'en ai une et une seule valeur définie comme
JsonResult
je l'utilise seul. Oui je l'ai remarqué et +1.Merci, malheureusement je suis sur MVC2 encore. (Aurez besoin de mettre à jour bientôt!) Je vais mettre en application ce que vous avez dit et de voir.
OriginalL'auteur Darin Dimitrov
Dans ASP.NET de Base, l'utilisation
NotFound()
Votre contrôleur doit hériter de
Controller
et la méthode doit retournerActionResult
Exemple:
OriginalL'auteur Fab