You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC:Razor页面加载多语言条款文件问题

解决方案

1. 控制器中读取静态HTML内容并传递给视图

在FilesController的对应Action里,先从URL获取语言前缀(比如路由参数culture),拼接合法的文件名后读取wwwroot内的HTML内容,再将内容传递给视图。示例代码:

private readonly IWebHostEnvironment _webHostEnvironment;

// 构造函数注入IWebHostEnvironment以获取wwwroot路径
public FilesController(IWebHostEnvironment webHostEnvironment)
{
    _webHostEnvironment = webHostEnvironment;
}

public IActionResult Terms(string culture = "en-US")
{
    // 限制允许的语言列表,防止路径遍历风险
    var allowedCultures = new List<string> { "en-US", "fr-CA" };
    if (!allowedCultures.Contains(culture))
    {
        culture = "en-US";
    }

    // 拼接文件路径
    var fileName = $"terms.{culture}.html";
    var filePath = Path.Combine(_webHostEnvironment.WebRootPath, fileName);

    // 读取HTML内容
    var termsContent = System.IO.File.ReadAllText(filePath);

    // 将内容传递给视图
    return View(model: termsContent);
}

2. 修改Terms.cshtml视图渲染内容

在视图中接收控制器传递的HTML内容,使用Html.Raw()渲染原始HTML代码,同时指定复用_HomeLayout布局:

@{
    Layout = "_HomeLayout";
}

@Html.Raw(Model)

3. 配置路由支持语言前缀

在Program.cs中配置带语言前缀的路由,让URL中的语言参数能被控制器正确捕获:

// 带语言前缀的路由
app.MapControllerRoute(
    name: "cultureTerms",
    pattern: "{culture}/{controller=Files}/{action=Terms}");

// 默认路由(无语言前缀时使用默认语言)
app.MapControllerRoute(
    name: "defaultTerms",
    pattern: "{controller=Files}/{action=Terms}/{culture?}");

这样用户访问/en-US/Files/Terms会加载英文条款,/fr-CA/Files/Terms加载法语条款,无语言前缀时自动使用默认的en-US版本。

内容的提问来源于stack exchange,提问作者xandune

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:27:09