asp.net core razor-如何在_layout.cshtml文件中使用appsettings.json值?

slmsl1lt  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(260)

在asp.net core with razor pages解决方案中,我有一个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"
}
oxf4rvwz

oxf4rvwz1#

console.log('from settings ' + @Configuration["APP_ID"]);

您必须记住,使用razor在服务器上呈现某些内容与浏览器中如何解释这些内容无关。
当razor呈现上述内容时,它将在结果中写入以下内容(当 APP_ID = "x" ):

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

如您所见,现在您的app_id的值直接写入console.log调用中。razor不知道它在写什么,所以这就是它将如何产生输出。
然后,当浏览器接收并执行此操作时,浏览器将看到 + x 根据实际值,该部件将因多种可能的错误之一而失效。因为从javascript的Angular 来看,这是无效的。
因此,为了解决这个问题,您必须确保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的非常安全的方法。

相关问题