代码之家  ›  专栏  ›  技术社区  ›  McMurphy

.NET核心配置URL与编码

  •  0
  • McMurphy  · 技术社区  · 9 月前

    我有一个URL,我想把它保存在apps.json中:

    "MapLookupURL": "https://www.google.com/maps/search/?api=1&query=",
    

    然后,我通过以下方式检索此字符串:

    window.open("@(Configuration.MapLookupURL)" + 
    

    问题是。NET正在对字符串进行编码(包括中的与号 "&query=" )因此,从与号开始,一切都变得毫无用处。

    我该怎么停下来。NET做这个?

    1 回复  |  直到 9 月前
        1
  •  1
  •   Tiny Wang    9 月前

    请试试 window.open("@(Html.Raw(_config["MapLookupURL"]))" + "Seoul"); .

    以下是我的测试重用代码:

    @using Microsoft.Extensions.Configuration
    @inject IConfiguration _config
    @{
        ViewData["Title"] = "Home Page";
    }
    
    <div class="text-center">
        <h1 class="display-4">Welcome</h1>
        <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
    </div>
    
    <button id="btn1">click to search</button>
    <div id="cont1">@_config["MapLookupURL"]</div>
    
    @section Scripts{
        <script>
            $("#btn1").click(function () {
                var a = @_config["MapLookupURL"];
                var b = "@Html.Raw(_config["MapLookupURL"])";
                console.info(a);
                window.open("https://www.google.com/maps/search/?api=1&query=" + "Seoul");
                // window.open("@_config["MapLookupURL"]" + "Seoul");
            })
        </script>
    }
    

    您将看到,当页面加载时,它已经将js中的asp.net核心vaiable转换为纯html内容。与此同时,Razor会自动对任何字符串输出进行HTML编码,以防止跨站脚本(XSS)攻击。这就是为什么我们可以看到 <div id="cont1">@_config["MapLookupURL"]</div> 显示良好(浏览器可以直接显示编码),但 <script> 它没有。解决方法是使用 @Html.Raw(_config["MapLookupURL"]) 其输出未编码的原始字符串。

    enter image description here