Saya ingin dapat meminta .html
file statis yang terletak di ~/Views
folder tersebut. Menurut dokumentasi, sistem perutean memeriksa untuk melihat apakah URL cocok dengan file disk sebelum mengevaluasi rute aplikasi.
Tetapi ketika saya meminta file, 404
kesalahan muncul.
File saya terletak di folder ~ / Views. URL-nya adalah:http://[localhost]/Views/HtmlPage1.html
Apa yang saya lewatkan?
sumber
Untuk mengizinkan file seperti js dan html di folder Views, edit web.config di 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>
sumber
Anda bisa. Jawaban yang ditandai tidak sepenuhnya benar, meskipun memberikan solusi.
Alasan di jawaban yang ditandai benar, itu adalah web.config (pengaturan BlockViewHandler untuk lebih spesifik) di folder Views yang mencegah file untuk diakses secara langsung. Itu ada untuk mengamankan pandangan di Asp.Net MVC. Tetapi jika Anda mengajukan pertanyaan tentang menyajikan file-file ini secara langsung maka Anda mungkin memiliki alasan yang valid untuk melakukannya, seperti menggunakan tampilan parsial AngularJS (seperti dalam kasus kami) di mana kami tidak ingin menduplikasi folder tampilan dengan nama yang aneh.
Jadi di sini adalah tweak yang sangat sederhana yang dapat Anda lakukan di file web.config yang ditemukan di folder Views, tanpa mengorbankan keamanan tampilan mvc asp.net Anda. Ini akan mengamankan file .cshtml seperti biasa tetapi membiarkan file .html Anda sendiri
Ubah ini
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
--untuk--
<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
sumber
Opsi alternatif lainnya adalah memasukkan metode tindakan di salah satu pengontrol yang diinginkan untuk menyajikan file html
public ActionResult MyHtml() { var result = new FilePathResult("~/Views/HtmlPage1.html", "text/html"); return result; }
Akses html sebagai http: // yoursite / controller / MyHtml . Anda dapat memperluas metode tindakan ini untuk menerima nama file html sebagai parameter metode / querystrign dan membuat file tersebut pada waktu proses, misalnya sesuatu seperti ini.
public ActionResult MyHtml(string htmlPageName) { var result = new FilePathResult($"~/Views/{htmlPageName}.html", "text/html"); return result; }
sumber
Jika Anda berencana menggunakan folder tampilan dalam, jawaban di atas seharusnya yang terbaik tetapi jawaban ini mungkin berguna bagi pengguna yang bermigrasi ke inti mvc asp.net. Menempatkan file di wwwroot alih-alih folder views seharusnya membuat halaman html Anda mudah diakses sebagai localhost / myfile.html
sumber