J'ai un projet basé sur l'échantillon Blazor avec un entraîne dans l'erreur: p> Comment puis-je lire des fichiers côté serveur et les garder cachés au client? P> p> .Client code>,
.server code> et
.shared code> projets. J'ai un fichier texte
data.txt code> sur le serveur que je veux pouvoir lire / écrire à l'aide de standard
standardReader code> /
system.io.file code> 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
url / data.txt code> dans le navigateur de sorte que le fichier obtient servi, que je ne veux pas souffrir, mais essayant de lire ce fichier comme tel:
4 Réponses :
wasm: [system.io.filenotfoundexception] n'a pas pu trouver le fichier "/data.txt" strud> 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. P>
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. p>
J'espère que cela vous aide ... p>
Pouvez-vous fournir un exemple de création d'une API Web pour faire cela?
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: et appelez-le dans votre page comme: p> 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. P> p> MyDataClass code> est votre classe personnalisée contenant tout ce que vous devez lire / écrire. P>
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!
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");
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 ();
Pour lire un fichier côté serveur placé dans votre projet, utilisez-le comme celui-ci: P>
article: https: //www.peugn. NET / FR / LISTER-SERVER-FILES-FILES-AVEC-BLAZOR / P> system.io.file.readallTeltext ($ "{system.io.directory.getcurrentTraRectory ()} {@" \ wwwroot \ data.txt "}"); code> p>
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? CODE> Que voulez-vous dire par
le client code>? Voulez-vous dire
le navigateur code>? Pourquoi B> ne voulez-vous pas que le client le voie?