javascript - 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"
}
解决方案
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 的非常安全的方式。
推荐阅读
- c# - 用于 dropzone 的 Selenium 上传文件
- flutter - Hero 小部件第一次没有启动 (Flutter)
- android - 无法删除 Firebase 数据库记录
- python - 为什么 0.58*100=0.5799999999... 发生在 python 中
- sql-server - 如何将存储过程的返回值与 Poco 绑定?
- react-native - 不要灰显 React Native Elements 中的 Disabled TextInput
- html - 向 Accordion bootstrap 4 添加多级下拉菜单?
- gradle - Gradle 任务不会在所有子项目中运行
- postgresql - 当 Postgres 中的 OTHERS THEN NULL 时的异常
- node.js - 我如何检查一个人是否在 discord.js 中上线、下线等?