首页 > 解决方案 > Asp.Net core razor - 如何在 _Layout.cshtml 文件中使用 appsettings.json 值?

问题描述

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

我想APP_ID从 _Layout.cshtml 文件中的 appsettings.development.json 文件中获取 的值。这个怎么做?

我已经尝试如下,它在浏览器中显示控制台错误-“参数列表后未捕获的语法错误:缺少)”。请让我知道如何使用 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"
}

标签: javascriptasp.net-corerazor-pages

解决方案


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 的非常安全的方式。


推荐阅读