【问题标题】:Nancy accessing/rewriting response南希访问/重写响应
【发布时间】:2012-08-01 15:14:30
【问题描述】:

在 Nancy 找到视图并处理完所有内容后,我试图将一些文本(特别是几行 javascript 代码)注入到来自 Nancy 的 HTML 响应中。 After 钩子似乎是我想做的地方。我可以通过给定的上下文访问Response 对象,但是我尝试从中检索任何数据都失败了。它是Action<Stream> 类型的,所以我一直在尝试将它写入内存,然后是一个字符串,如下所示:

public HelloModule()
{
    After += ctx => {
                var stream = new MemoryStream();
                ctx.Response.Contents.Invoke(stream);

                stream.Position = 0;
                using (var reader = new StreamReader(stream))
                {
                    var content = reader.ReadToEnd();
                }
    };

    Get["/"] = p => View["Issues/Views/SingleIssue"];            
}

但是,当它运行时,ctx.Response.Contents(stream); 行出现异常。例外是 InvalidOperationException,它只声明 "CSRF is not enabled on this request"

所以,我的问题是:如何让 Nancy 允许我访问其生成的当前 Response 的 HTML?还是我完全不同意我要如何做到这一点?有没有更好的办法?

编辑 2:这似乎是 SuperSimpleViewEngine 的问题。我刚刚创建了一个新的、干净的项目,只有一个视图。 SSVE 可以重现它,但火花视图引擎可以正常工作。

编辑 1:

根据要求提供更多信息。上面的代码现在包含模块的整个构造函数。我没有自定义引导程序或其他逻辑。该视图是一个使用默认 SuperSimpleViewEngine 的相当简单的视图,其组成如下:

Master.sshtml

<html>
<head>
    <script type="text/javascript" src="/Scripts/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="/Scripts/jquery-ui-1.8.22.min.js"></script>
    <script type="text/javascript" src="/Scripts/jquery-ui-1.8.21.custom.min.js"></script>
    <script type="text/javascript" src="/Scripts/dais-exts.js"></script>
    <link rel="stylesheet" type="text/css" href="/Content/Style.css" />
    <link rel="stylesheet" type="text/css" href="/Content/jquery-ui-1.8.21.custom.css" />
    @Section['Head']
</head>
<body>
    @Section['Content']
</body>
</html>

SingleIssue.sshtml

@Section['Head']
    <title>Hello!</title>
@EndSection

@Section['Content']
    <h2>View/Edit Issue</h2>

    <form id="issue-form" method="post">
        <input type="hidden" name="HttpMethod" value="Put" />
        <input type="submit" />
    </form>
@EndSection

【问题讨论】:

  • 能否请您提供更多上下文(即您的渲染是什么样的视图,它看起来像什么,您是否在引导程序中进行了任何自定义等等)?它可以很好地阅读基本的剃须刀视图gist.github.com/3205877
  • CSRF 是防伪令牌的东西,那么您是否启用了它并在您看来正在使用它?
  • 更新了问题。我没有故意启用或使用其中任何一个,除非它默认存在?
  • 我可以确认,如果我将其更改为 SuperSimpleViewEngine 视图,我也能够重现此问题。要去调查!
  • 对。 SSVE 始终假定 CSRF 已启用,通常情况下是启用的,但由于视图的呈现现在以不同的顺序发生,因此尚未生成令牌。将研究解决/修复

标签: c# nancy


【解决方案1】:

回答这个问题,让任何发现这个问题的人都知道发生了什么。

这实际上是 Nancy(0.11 版)中的一个错误,仅在使用 SuperSimpleViewEngine 时发生。不幸的是,没有简单的解决方法或解决方案,但已对源进行了修复。因此,解决该问题的选项是:

  • 等待南希 0.12。
  • source 自己构建一个新版本。
  • 使用不同的视图引擎。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    相关资源
    最近更新 更多