web-dev-qa-db-fra.com

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

Je veux pouvoir demander des fichiers statiques .html Qui se trouvent dans le dossier ~/Views. Selon la documentation, le système de routage vérifie si une URL correspond à un fichier sur disque avant d'évaluer les itinéraires de l'application.

Mais lorsque je demande le fichier, une erreur 404 Se produit.

Mon fichier se trouve dans le dossier ~/Views. L'URL est la suivante: http://[localhost]/Views/HtmlPage1.html

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

87
alex.mironov

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

Tu ne peux pas. Il y a un fichier web.config dans ce dossier qui interdit explicitement d'accéder à tout fichier à partir de celui-ci. Si vous voulez pouvoir accéder aux fichiers du client, vous ne devez pas les placer dans le dossier Views, qui a une signification particulière dans ASP.NET MVC.

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

http://example.com/yourapplicationname/static/foo.html
103
Darin Dimitrov

Pour autoriser des fichiers tels que js et html dans le dossier Views, éditez le fichier web.config dans le dossier Views:

<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>
72
cs3x

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

Bien, vous pouvez. La réponse marquée n'est pas tout à fait correcte, bien qu'elle donne une solution.

Le raisonnement dans la réponse marquée est correct, il s’agit de web.config (le paramètre BlockViewHandler doit être spécifique) dans le dossier Vues 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 traitement direct de ces fichiers, vous avez probablement une raison valable de le faire, par exemple, en utilisant des vues partielles AngularJS (comme dans notre cas) où nous ne voulons pas dupliquer le dossier des vues avec des noms étranges.

Voici donc un tweak très simple que vous pouvez faire dans le fichier web.config qui se trouve dans le dossier Vues, ​​sans compromettre la sécurité de vos vues asp.net mvc. Ceci sécurisera les fichiers .cshtml comme d’habitude, mais laissera vos fichiers .html seuls.

Change ça

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

--à--

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

Une autre option consiste à insérer une méthode d'action dans l'un des contrôleurs souhaités pour servir le fichier html.

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

Accédez au code HTML en tant que http: // yoursite/controller/MyHtml . Vous pouvez étendre cette méthode d'action pour accepter le nom de fichier html en tant que paramètre method/querystrign et restituer le fichier au moment de l'exécution, par exemple, quelque chose comme cela.

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

Si vous envisagez d’utiliser Inside View, les réponses ci-dessus sont préférables, mais cette réponse peut être utile aux utilisateurs qui migrent vers asp.net mvc core. Placer des fichiers dans wwwroot au lieu du dossier views devrait permettre à vos pages html d’accéder facilement à localhost/myfile.html.

0
Kurkula