【问题标题】:Asp.Net core razor - how to use appsettings.json value in _Layout.cshtml file?Asp.Net core razor - 如何在 _Layout.cshtml 文件中使用 appsettings.json 值?
【发布时间】:2021-09-21 12:48:48
【问题描述】:

在带有 Razor Pages 解决方案的 ASP.NET Core 中,我有一个 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"
}

【问题讨论】:

  • 您收到 "Uncaught SyntaxError: missing ) after argument list" 错误的原因是您需要转义 @Configuration["APP_ID"] 值才能将其解析为有效javascript。使用@Html.Raw(Json.Encode(val))
  • 谢谢,还有一个问题,我在 appsettings.json 和 launchsettings.json 中都有相同的“APP_ID”值。但是,使用 Microsoft.Extensions.Configuration @inject IConfiguration Configuration --- 仅从 launchsettings.json 而不是从 appsettings.json 获取值。知道如何从 appsettings.json 文件中获取“APP_ID”的值吗?

标签: javascript asp.net-core razor-pages


【解决方案1】:
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 的非常安全的方式。

【讨论】:

  • 感谢您的回复,正如您所提到的,它与 @Json.Serialize(Configuration["APP_ID"]) 配合得很好
  • 还有一个问题,我在 appsettings.json 和 launchsettings.json 中都有相同的“APP_ID”值。但是,使用 Microsoft.Extensions.Configuration @inject IConfiguration Configuration --- 仅从 launchsettings.json 而不是从 appsettings.json 获取值。知道如何从 appsettings.json 文件中获取“APP_ID”的值吗?
  • 不应使用启动设置,除非您的意思是在那里配置了环境变量。在这种情况下,您无法从 appsettings.json 显式检索值(除非再次显式加载文件),因为配置应该能够相互覆盖(appsettings.&lt;environment&gt;.json 覆盖 appsettings.json,并且环境变量能够覆盖两者)。 – 无论如何,launchsettings 文件只存在于开发过程中,因此您可以删除那里的配置并仅使用 appsettings 文件。
猜你喜欢
  • 2021-11-22
  • 2021-07-14
  • 2021-12-29
  • 2019-03-13
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
  • 2016-12-21
  • 2016-11-11
相关资源
最近更新 更多