【ASP.NET Core Web】cshtmlにhtmlを読み込む
2024-9-12 | ASP.NET Core Web, C#
ASP.NET Core Webでcshtmlにhtmlを読み込みたい!
概要
今回の記事では、ASP.NET Core Webでcshtmlにhtmlを読み込む手順を掲載する。
めちゃくちゃ使いどころが限られるという。
仕様書
環境
- .NET 8
手順書
Razor Pages編とMVC編の2部構成です。
Razor Pages編
例としてRazor PageであるPages/Index.cshtml
にwwwroot\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"])
まとめ(感想文)
使いそうになって作ったんだけども、最終的には不採用になったという悲しき記憶の断片。それがこの記事。