Asp.Net core razor - 如何使用 _Layout.cshtml 文件中的 appsettings.json 值?

Asp.Net core razor - how to use appsettings.json value in _Layout.cshtml file?

在 ASP.NET Core with Razor Pages 解决方案中,我有一个 appsettings.development.json 文件,如下所示。

我想从 _Layout.cshtml 文件中的 appsettings.development.json 文件中获取 APP_ID 的值。如何做到这一点?

我试过如下所示,它在浏览器中显示控制台错误 - “未捕获的语法错误:参数列表后缺少 )”。请让我知道如何使用 json 文件中的这个值:

@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
<!DOCTYPE html>
<html lang="en">
<head>
    <script>
        console.log('from settings ' + @Configuration["APP_ID"]);

…

我的 appsettings.development.json 文件:

{
  "APP_ID" : "xxxxxxxxxx",
  "APP_Value" : "zzzzzzzzzzzzz"
}
console.log('from settings ' + @Configuration["APP_ID"]);

您必须记住,使用 Razor 在服务器上呈现某些内容与浏览器中的解释方式无关。

当 Razor 渲染上述内容时,它会将以下内容写入结果(当 APP_ID = "xxxxxxxxxx" 时):

console.log('from settings ' + xxxxxxxxxx);

如您所见,现在 APP_ID 的值直接写入 console.log 调用中。 Razor 不知道它在写什么,所以这就是它产生输出的方式。

然后,当浏览器接收并执行它时,浏览器将看到 + xxxxxxxxxx 部分,根据实际值,该部分将因许多可能的错误之一而失败。因为从JavaScript的角度来看,这是无效的。

因此,为了解决这个问题,您必须确保您的 Razor 视图为浏览器生成有效 代码。这也适用于 JavaScript 和 HTML。一种方法是使用 Razor 视图中可用的 JSON 序列化程序。由于 JSON 是 JavaScript 表示法,它将始终是 有效 JavaScript,因此您可以使用此井将数据从 Razor 传递到 JavaScript.

在你的情况下,你可以这样写:

@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
<!DOCTYPE html>
<html lang="en">
<head>
    <script>
        console.log('from settings ' + @Json.Serialize(Configuration["APP_ID"]));

…

注意 Json.Serialize 调用您的值。当 JSON 序列化器只接收到一个字符串时,它会正确地引用它——并注意正确地转义值本身中的任何引号。因此,这是将您的值嵌入 JavaScript.

的一种非常安全的方法