2017-09-20 7 views
0

Mon application noyau 2.0 est configuré avec des rôles d'authentification, et j'ai mes actions de contrôleur ensemble avec [Authorize(Roles="demo_user")] etc..net core 2.0 mvc + kestrel - comment verrouiller les répertoires aux actions du contrôleur?

autorisation fonctionne très bien, ma question est de savoir comment verrouiller les répertoires de contenu et les servir que par une action du contrôleur?

lecture des documents, il semble que je dois servir docs base de cet article: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files

Et je crois que les informations que je suis intéressé est ce paragraphe:

autorisation de fichier statique Le module de fichiers statiques n'effectue aucun contrôle d'autorisation . Tous les fichiers qu'il traite, y compris ceux qui sont sous wwwroot, sont accessibles au public. Pour servir les fichiers en fonction de l'autorisation: les stocker en dehors de wwwroot et un répertoire accessible au middleware de fichiers statiques et les servir par une action du contrôleur, retournant un FileResult où l'autorisation est appliquée

Quelqu'un at-il des exemples de stocker des répertoires en dehors de wwwroot et les servir via des actions de contrôleur?

+1

Vous pouvez voir dans [cette réponse] (https://stackoverflow.com/a/42460443/19046) comment retourner un fichier à partir d'un contrôleur. Ensuite, c'est à vous de voir comment associer vos paramètres d'itinéraire à vos fichiers. – DaniCE

Répondre

1

Pour servir un fichier à partir d'une action dans ASP.NET de base, vous pouvez faire quelque chose comme ceci:

[Authorize] 
public IActionResult GetMyFile() 
{ 
    byte[] fileBytes = System.IO.File.ReadAllBytes("MyPrivateFiles/file1.txt"); 
    return new FileContentResult(fileBytes, "text/plain"); 
} 

Gardez à l'esprit votre application devra avoir des autorisations de lecture sur le dossier MyPrivateFiles.

+0

Existe-t-il des exemples de lecture et de renvoi de répertoires complets? Si j'ajoute des fichiers de contenu supplémentaires à un répertoire spécifique, je ne veux pas avoir à le coder en dur dans le contrôleur. –

+0

Vous pouvez ajouter un paramètre à votre action pour renvoyer un fichier avec un nom spécifique et créer une action distincte qui renvoie une liste de tous les fichiers. Votre application .NET Core peut utiliser le système de fichiers comme toute autre application, mais vous devez créer l'interface du système de fichiers de votre contrôleur avec toutes les fonctions que vous souhaitez. – Neil

+0

Compressez le répertoire et retournez en un seul fichier ... – Theyouthis