Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未从HttpContext.Items填充Html属性_C#_Html_Razor_Asp.net Core - Fatal编程技术网

C# 未从HttpContext.Items填充Html属性

C# 未从HttpContext.Items填充Html属性,c#,html,razor,asp.net-core,C#,Html,Razor,Asp.net Core,我的问题似乎相当简单,我觉得我遗漏了一些非常明显的东西;但是我无法确定为什么脚本元素上的Nonce属性没有填充,而是保留空字符串 我决定在HttpContext中使用Items集合来存储nonce,因为据我所知,它是每个请求的 配置(IApplicationBuilder应用程序,IHostingEnvironment环境) 看法 。。。 @节脚本{ } 结果: 这看起来很简单,我真的很困惑为什么属性没有填充。 我对web开发有点陌生,所以如果有什么特别之处,我将非常感谢ASP.NETCor

我的问题似乎相当简单,我觉得我遗漏了一些非常明显的东西;但是我无法确定为什么脚本元素上的Nonce属性没有填充,而是保留空字符串

我决定在HttpContext中使用Items集合来存储nonce,因为据我所知,它是每个请求的

配置(IApplicationBuilder应用程序,IHostingEnvironment环境)

看法

。。。
@节脚本{
}
结果:

这看起来很简单,我真的很困惑为什么属性没有填充。 我对web开发有点陌生,所以如果有什么特别之处,我将非常感谢ASP.NETCore2中的任何提示

答复:; 回答:;

您是否正在查看Chrome开发者工具的元素选项卡中的
nonce
属性?如果是这样,请查看服务器返回的响应(在“网络”选项卡中)——您可能会感到惊讶。我只是试图重现你的问题,发现一切正常,只是Chrome没有在元素选项卡中显示nonce值(我相信这是一种安全措施)。是的,这会导致问题吗?当我硬编码值时,它就工作了。我看到了它,我不知道如何在chrome中显示它,但我在fiddler中打开了它,果然,你是对的。它一直在那里。谢谢你指出这一点,我从来没有想到chrome会隐藏它。
...
app.Use(async (context, next) => { //CSP
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
    byte[] nonceBytes = new byte[32];
    rng.GetBytes(nonceBytes);
    string nonce = Convert.ToBase64String(nonceBytes);
    context.Items.Add("ScriptNonce", nonce);
    context.Response.Headers.Add("Content-Security-Policy", string.Format(
        "default-src 'none'; " +
        "script-src 'self' 'unsafe-eval' 'nonce-{0}'; " +
        "style-src 'self'; " +
        "img-src 'self' data: https:; " +
        "base-uri 'self'; " +
        "upgrade-insecure-requests; " +
        "object-src 'none'; ", nonce));
    await next();
});
...
...
@section Scripts {
    <script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.min.js" nonce="@Context.Items["ScriptNonce"]"></script>
    <script src="~/js/Views/Admin/users_index.min.js" nonce="@Context.Items["ScriptNonce"]"></script>
}