ASP.net core, MVC attraper tous les parcours de servir des fichiers statiques
Est-il un moyen de faire un fourre-tout de l'itinéraire servir d'un fichier statique?
En regardant ce http://blog.nbellocam.me/2016/03/21/routing-angular-2-asp-net-core/
En gros, je veux quelque chose comme ceci:
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller}/{action=Index}");
routes.MapRoute("spa", "{*url}"); //This should serve SPA index.html
});
Donc un itinéraire qui ne correspond pas à un contrôleur MVC serviront wwwroot/index.html
Si vous êtes déjà dans l'acheminement de l'élément, vous avez passé le point où les fichiers statiques sont servis dans le pipeline. Vous pouvez créer un fourre-tout de contrôleur de l'action qui sera de retour le contenu de ce fichier à la place.
Est-il recommandé de le faire?
Pas pour autant que je sais.
Est-il recommandé de le faire?
Pas pour autant que je sais.
return File("~/index.html", "text/html");
dans l'action semble bien fonctionnerOriginalL'auteur Mardoxx | 2017-02-23
Vous devez vous connecter pour publier un commentaire.
Si vous êtes déjà dans le routage, vous avez passé le point où les fichiers statiques sont servis dans le pipeline. Votre startup va ressembler à quelque chose comme ceci:
L'ordre ici est important. Ainsi, votre application va chercher les fichiers statiques, d'abord, qui fait sens du point de vue des performances - pas besoin de courir à travers MVC pipeline si vous voulez juste jeter un fichier statique.
Vous pouvez créer un fourre-tout de contrôleur de l'action qui sera de retour le contenu de ce fichier à la place. Par exemple (voler le code dans votre commentaire):
File
classe, c'est que vous utilisez? Il ne peut pas êtreSystem.IO.FileSystem.File
. Ne peut pas trouver un bon match.Ce n'est pas un fichier de classe, c'est la
File
méthode de la classe du contrôleur.J'ai été un idiot, j'ai oublié d'hériter de
Controller
, c'est pourquoi je ne pourrais pas le voir. Thx!OriginalL'auteur DavidG
J'ai dû faire quelques ajouts à @DavidG réponse. Voici ce que j'ai fini avec
De démarrage.cs
HomeController.cs
OriginalL'auteur Ben Anderson
ASP.NET Core attraper tous les itinéraires pour les API Web et MVC sont configurés différemment
Avec l'API Web (
if you're using prefix "api" for all server-side controllers eg. Route("api/[controller"]
):Avec MVC (
dotnet add package Microsoft.AspNetCore.SpaServices -Version x.y.z
):UseStaticFiles
avant votre logique, de sorte que les fichiers statiques seront servis en premier et je n'ai pas besoin deUseDefaultFiles
. Plus important encore, j'ai dû définir le chemin d'accès commecontext.Request.Path = "/";
et dans mon contrôleur HomeController l'Index de l'action, servirFile("~/index.html", "text/html");
.OriginalL'auteur ostati
Ce que je suis en utilisant cela fonctionne bien, est
Microsoft.AspNetCore.Builder.SpaRouteExtensions.MapSpaFallbackRoute
:HomeController.Index
a l'équivalent de votreindex.html
. Vous pouvez probablement en route vers une page statique aussi.Un peu hors sujet, mais si vous avez aussi un API dans le même projet dans le cadre d'un
api
dossier, vous pouvez définir une valeur par défaut de réponse 404 pour n'importe quel API routes qui ne correspondent pas:Vous vous retrouvez avec le comportement suivant:
/controller
=> Pas d'extension, afin de servir SPA de la page par défaut deHomeController.Index
et laissez le SPA de la poignée de routage/file.txt
=> Extension détecté, servir les fichiers statiques/api/controller
=> une bonne API réponse (utilisation de l'attribut de routage ou de mettre en place une autre carte pour les contrôleurs d'API)/api/non-existent-route
=> 404NotFound()
retourné à partir deHomeController.ApiNotFound
Dans de nombreux cas, vous aurez envie d'une API dans un projet distinct, mais c'est une alternative viable.
OriginalL'auteur Nelson Rothermel
Afin de servir
index.html
dewwwroot
dossier les directives suivantes devraient être ajoutées (.Net Core 2).Cela permet de servir des fichiers statiques:
Ce qui permet d'obtenir des fichiers par défaut, par exemple
index.html
:OriginalL'auteur TSV