4

ビューを見つけてすべてを処理した後、ナンシーからの HTML 応答にテキスト (具体的には数行の JavaScript コード) を挿入しようとしています。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"です。

それで、私の質問は次のとおりです。ナンシーに、現在Response作成されているHTMLへのアクセスを許可するにはどうすればよいですか? それとも、私がこれをやろうとしている方法を完全に理解していませんか? より良い方法はありますか?

編集 2:これはSuperSimpleViewEngineの問題のようです。単一のビューで新しいクリーンなプロジェクトを作成しました。SSVE はそれを再現できますが、Spark ビュー エンジンは問題なく動作します。

編集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
4

1 に答える 1

4

質問に答えて、これを見つけた人が何が起こっているのかを知っているように.

これは実際には Nancy (バージョン 0.11) のバグであり、SuperSimpleViewEngine を使用している場合にのみ発生します。残念ながら、簡単な回避策や解決策はありませんが、ソースには修正が適用されています。したがって、問題を解決するためのオプションは次のとおりです。

  • Nancy 0.12 を待ちます。
  • sourceから自分で新しいバージョンをビルドします。
  • 別のビュー エンジンを使用します。
于 2012-08-01T07:14:30.433 に答える