在找到视图并处理完所有内容后,我试图将一些文本(特别是几行 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的相当简单的视图,它的组成如下:
大师.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