¿Cómo solicita archivos .html estáticos en la carpeta ~ / Views en ASP.NET MVC?

Deseo poder solicitar archivos .html estáticos que se encuentran en la carpeta ~/Views . De acuerdo con la documentación, el sistema de enrutamiento comprueba si una URL coincide con un archivo de disco antes de evaluar las rutas de la aplicación.

Pero cuando solicito el archivo, aparece un error 404 .

Mi archivo está ubicado en la carpeta ~ / Views. La URL es: http://[localhost]/Views/HtmlPage1.html

¿Qué me he perdido?

Deseo poder solicitar archivos .html estáticos que se encuentran en la carpeta ‘~ / Vistas’.

No puedes. Hay un archivo web.config en esta carpeta que explícitamente prohíbe el acceso a cualquier archivo desde él. Si desea poder acceder a los archivos del cliente, esos archivos no deben colocarse en la carpeta Views que tiene un significado especial en ASP.NET MVC.

Podría tener una carpeta ~/Static donde podría colocar sus archivos HTML. Y luego acceda así:

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

Para permitir archivos como js y html en la carpeta Vistas, edite web.config en views-Folder:

        

Deseo poder solicitar archivos .html estáticos que se encuentran en la carpeta ~ / Views.

Bien tu puedes. La respuesta marcada no es del todo correcta, aunque da una solución.

El razonamiento en la respuesta marcada es correcto, es web.config (la configuración de BlockViewHandler es específica) en la carpeta Vistas que impide el acceso directo a los archivos. Está ahí para asegurar las vistas en Asp.Net MVC. Pero si hace una pregunta acerca de cómo publicar estos archivos directamente, es probable que tenga una razón válida para hacerlo, como usar vistas parciales de AngularJS (como en nuestro caso) donde no queremos duplicar la carpeta de vistas con nombres extraños.

Así que aquí hay un ajuste muy simple que puede hacer en el archivo web.config que se encuentra en la carpeta Vistas, sin comprometer la seguridad de sus vistas asp.net mvc. Esto asegurará los archivos .cshtml como de costumbre, pero deja tus archivos .html solos.A

Cambia esto

  

–a–

  

Otra opción alternativa es insertar un método de acción en cualquiera de los controladores deseados para servir el archivo html

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

Acceda al html como http: // yoursite / controller / MyHtml . Puede ampliar este método de acción para aceptar el nombre del archivo html como parámetro de método / querystrign y procesar el archivo en tiempo de ejecución, por ejemplo, algo así.

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