南希访问/重写响应

时间:2012-07-30 09:05:05

标签: c# 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

1 个答案:

答案 0 :(得分:4)

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

这实际上是Nancy(版本0.11)中的一个错误,只有在使用SuperSimpleViewEngine时才会出现。遗憾的是,没有简单的解决方法或解决方案,但已对源进行了修复。因此,解决问题的选项是:

  • 等待南希0.12。
  • source建立新版本。
  • 使用其他视图引擎。