95 votes

Comment demander des fichiers .html statiques dans le dossier ~/Views en ASP.NET MVC ?

Je veux pouvoir demander des informations statiques .html qui sont situés dans le répertoire ~/Views dossier. Selon la documentation, le système de routage vérifie si une URL correspond à un fichier disque avant d'évaluer les routes de l'application.

Mais quand je demande le fichier un 404 une erreur survient.

Mon fichier est situé dans le dossier ~/Views. L'URL est : http://[localhost]/Views/HtmlPage1.html

Qu'est-ce que j'ai manqué ?

113voto

Darin Dimitrov Points 528142

Je veux pouvoir demander des fichiers .html statiques qui se trouvent dans le dossier "~/Views".

Vous ne pouvez pas. Il y a un fichier web.config dans ce dossier qui interdit explicitement l'accès à tout fichier depuis ce dossier. Si vous souhaitez pouvoir accéder à des fichiers depuis le client, ces fichiers ne doivent pas être placés dans le dossier Views qui a une signification particulière dans ASP.NET MVC.

Vous pourriez avoir un ~/Static où vous pouvez placer vos fichiers HTML. Et vous pourrez y accéder comme ça :

http://example.com/yourapplicationname/static/foo.html

79voto

cs3x Points 21

Pour autoriser les fichiers comme js et html dans le dossier Views, éditez le web.config dans views-Folder :

<system.webServer>
<handlers>
  <add name="JavaScriptHandler" path="*.js" verb="*"
     preCondition="integratedMode" type="System.Web.StaticFileHandler" />      
  <add name="HtmlScriptHandler" path="*.html" verb="*"
     preCondition="integratedMode" type="System.Web.StaticFileHandler" />
  <remove name="BlockViewHandler"/>
  <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>

31voto

Vikas Points 78

Je veux pouvoir demander des fichiers .html statiques qui se trouvent dans le dossier ~/Views. dans le dossier ~/Views.

Et bien tu peux. La réponse marquée n'est pas entièrement correcte, bien qu'elle donne une solution.

Le raisonnement de la réponse marquée est correct, c'est web.config (le paramètre BlockViewHandler pour être précis) dans le dossier Views qui empêche l'accès direct aux fichiers. Il est là pour sécuriser les vues dans Asp.Net MVC. Mais si vous avez posé une question sur le fait de servir ces fichiers directement, vous avez probablement une raison valable de le faire, comme l'utilisation de vues partielles AngularJS (comme dans notre cas) où nous ne voulons pas dupliquer le dossier Views avec des noms bizarres.

Voici donc une modification très simple que vous pouvez apporter au fichier web.config situé dans le dossier Views, sans compromettre la sécurité de vos vues asp.net mvc. Cela sécurisera les fichiers .cshtml comme d'habitude mais laissera vos fichiers .html tranquilles.

Changez ceci

<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode"    type="System.Web.HttpNotFoundHandler" />

--à--

<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />

15voto

Une autre option consiste à insérer une méthode d'action dans n'importe quel contrôleur souhaité pour servir le fichier html.

public ActionResult MyHtml()
{
    var result = new FilePathResult("~/Views/HtmlPage1.html", "text/html");
    return result;
}

Accédez au html comme http://yoursite/controller/MyHtml . Vous pouvez étendre cette méthode d'action pour accepter le nom du fichier html comme paramètre de méthode/querystrign et rendre le fichier au moment de l'exécution, par exemple quelque chose comme ceci.

 public ActionResult MyHtml(string htmlPageName)
 {
      var result = new FilePathResult($"~/Views/{htmlPageName}.html", "text/html");
      return result;
 }

1voto

Chandana Points 593

Si vous envisagez d'utiliser inside view folder, les réponses ci-dessus sont les meilleures, mais cette réponse peut être utile aux utilisateurs qui migrent vers asp.net mvc core. En plaçant les fichiers dans le dossier wwwroot au lieu du dossier views, vous devriez pouvoir accéder facilement à vos pages html comme localhost/myfile.html.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X