0
votes

Lire des fichiers côté serveur à l'aide de Blazor

J'ai un projet basé sur l'échantillon Blazor avec un .Client , .server et .shared projets. J'ai un fichier texte data.txt sur le serveur que je veux pouvoir lire / écrire à l'aide de standard standardReader / system.io.file méthodes. Depuis que Blazor s'exécute dans un bac à sable, je suppose que je ne peux pas accéder à l'ensemble du système de fichiers comme je le ferais dans une application Windows normale? J'ai placé le fichier dans le répertoire wwwroot , et je peux même accéder au fichier à partir du client si une entrée url / data.txt dans le navigateur de sorte que le fichier obtient servi, que je ne veux pas souffrir, mais essayant de lire ce fichier comme tel: xxx

entraîne dans l'erreur: xxx

Comment puis-je lire des fichiers côté serveur et les garder cachés au client?


3 commentaires

Blazor fonctionne dans le client. Il ne peut pas accéder au serveur. Il aura besoin d'une demande HTTP au serveur pour obtenir ses données.


question reformulée pour la clarté, car elle est censée être une question. @mjwills Si toutes les pages sont exécutées sur le client, je pourrais peut-être configurer une classe de contrôleur sur le serveur pouvant accéder aux fichiers?


et gardez-les cachés à partir du client? Que voulez-vous dire par le client ? Voulez-vous dire le navigateur ? Pourquoi ne voulez-vous pas que le client le voie?


4 Réponses :


3
votes

wasm: [system.io.filenotfoundexception] n'a pas pu trouver le fichier "/data.txt" est le message standard affiché par BLAZOR lorsque vous essayez d'accéder à un fichier local sur le client. La lecture à partir de fichiers ou de rédaction dans des fichiers n'est pas autorisée par la conception, car il s'agit d'une violation du bac à sable, couramment partagée par l'assemblage Web et JavaScript.

Sur le serveur Vous pouvez créer une API Web pouvant accéder localement à vos fichiers, que JSON, Texte, Base de données, etc. et Retours Résultats dans divers formats aux méthodes de blazor appelantes. Vous pouvez limiter l'accès aux données de ces fichiers, à l'aide de l'authentification et de l'autorisation.

J'espère que cela vous aide ...


1 commentaires

Pouvez-vous fournir un exemple de création d'une API Web pour faire cela?



4
votes

s'avère que c'était plus facile que je pensais. Je l'ai approché du mauvais angle. Pour accéder aux fichiers côté serveur, créer un contrôleur comme tel: xxx

et appelez-le dans votre page comme: xxx

MyDataClass est votre classe personnalisée contenant tout ce que vous devez lire / écrire.

Vous pouvez ensuite accéder à des fichiers exactement comme vous le feriez normalement, où que vous souhaitiez sur le serveur. Le répertoire actuel est votre dossier racine de projet.Server.


3 commentaires

Mon projet côté serveur Blazor ne reconnaît pas le type de dataaccess. "Le type de nom de données de l'espace de noms est introuvable. Il manque-t-il une directive ..." "Cela fonctionne-t-il uniquement avec Blasor côté client?


Qu'est-ce que Dataclass? J'ai ajouté un nouveau contrôleur au serveur et Visual Studio n'a aucune idée de ce que c'est. S'il vous plaît éditer votre réponse


@softwareAffun Le DataClass est votre classe personnalisée contenant tout ce que vous voulez lire / écrire, la mise en œuvre doit être assez simple que vous pouvez voir dans l'exemple de la mise en œuvre du contrôleur. J'ai mis à jour la réponse pour un peu plus de clarté. J'espère que cela pourra aider!



-1
votes

Oui, vous pouvez lire le fichier depuis wwwroot dossier dans l'application Blazor Webassembly. Utilisez ce code pour lire votre fichier

var response = await client.GetStringAsync(@"sample-data/test.xml");


1 commentaires

J'utilise l'application Blazor Webassembly, toutefois, lorsque j'utilise votre méthode, je reçois: System.InvalidoperationException: une URI de demande non valide a été fournie. L'URI de la demande doit soit être une URI absolue ou une baseAeaddress doit être définie. - J'utilise pour un client httpClient _Client = nouveau httpclient ();



-1
votes

Pour lire un fichier côté serveur placé dans votre projet, utilisez-le comme celui-ci:

system.io.file.readallTeltext ($ "{system.io.directory.getcurrentTraRectory ()} {@" \ wwwroot \ data.txt "}");

article: https: //www.peugn. NET / FR / LISTER-SERVER-FILES-FILES-AVEC-BLAZOR /


0 commentaires