【ASP.NET Core Web】cshtmlにhtmlを読み込む

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【ASP.NET Core Web】cshtmlにhtmlを読み込む

2024-9-12 | ,

ASP.NET Core Webでcshtmlにhtmlを読み込みたい!

概要

今回の記事では、ASP.NET Core Webでcshtmlにhtmlを読み込む手順を掲載する。

めちゃくちゃ使いどころが限られるという。

仕様書

環境

  • .NET 8

手順書

Razor Pages編とMVC編の2部構成です。

Razor Pages編

例としてRazor PageであるPages/Index.cshtmlwwwroot\index.htmlを読み込んでみる。

Pages/Index.cshtml.csにGET時に該当のhtmlを読み込む処理を書く。

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Text;

namespace webapp.Pages
{
    [AllowAnonymous]
    public class IndexModel : PageModel
    {
        private readonly IWebHostEnvironment _environment;

        public IndexModel(IWebHostEnvironment environment)
        {
            _environment = environment;
        }

        public string HtmlContent { get; set; }

        public void OnGet()
        {
            var fileProvider = _environment.WebRootFileProvider;
            var filePath = fileProvider.GetFileInfo("html/index.html").PhysicalPath;
            HtmlContent = System.IO.File.ReadAllText(filePath, Encoding.UTF8);
        }
    }
}

Pages/Index.cshtmlはこんな感じ。

@page
@model Pages.IndexModel
@Html.Raw(Model.HtmlContent)

MVC編

MVCでやりたい場合はControllers/AppController.csを下記のような感じに

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Mvc;

namespace webapp.Controllers
{
    public class AppController : Controller
    {
        private readonly IWebHostEnvironment _environment;

        public AccountController(IWebHostEnvironment environment)
        {
            _environment = environment;
        }

        public IActionResult Index()
        {
            var fileProvider = _environment.WebRootFileProvider;
            var filePath = fileProvider.GetFileInfo("html/index.html").PhysicalPath;
            var htmlContent = System.IO.File.ReadAllText(filePath, Encoding.UTF8);
            ViewData["HtmlContent"] = htmlContent;
            return View();
        }
    }
}

View/App/Index.cshtmlは下記のような感じ。

@Html.Raw(ViewData["HtmlContent"])

まとめ(感想文)

使いそうになって作ったんだけども、最終的には不採用になったという悲しき記憶の断片。それがこの記事。