2

ビューを返す前に NancyResponse 本体を取得することは可能ですか?

私はこれを意味します:

Get["/"] = x => {
                var x = _repo.X();
                var view = View["my_view", x];
                **//here I want to send the response body by mail**
                return view;
            };
4

3 に答える 3

4

気を付けて!この回答は nancy バージョン0.11に基づいており、それ以来多くの変更が加えられています。ルート内のバージョンは引き続き機能するはずです。コンテンツ ネゴシエーションを使用する場合ではないパイプライン後のもの。

コンテンツをルートのメモリ ストリームに書き込むか、デリゲートを After Pipeline に追加することができます。

public class MyModule: NancyModule
{
    public MyModule()
    {
        Get["/"] = x => {
            var x = _repo.X();
            var response = View["my_view", x];
            using (var ms = new MemoryStream())
            {
                response.Contents(ms);
                ms.Flush();
                ms.Position = 0;
                //now ms is a stream with the contents of the response.
            }
            return view;
        };

        After += ctx => {
           if (ctx.Request.Path == "/"){
               using (var ms = new MemoryStream())
               {
                   ctx.Response.Contents(ms);
                   ms.Flush();
                   ms.Position = 0;
                   //now ms is a stream with the contents of the response.
               }
           }
        };
    }
}
于 2012-07-27T09:26:01.850 に答える
1

View[]Responseオブジェクトを返し、それContentは型のプロパティを持っているAction<Stream>ので、デリゲートに a を渡すことができMemoryStream、そのストリームでビューをレンダリングします

于 2012-07-27T10:20:26.983 に答える
1

私は Nancy バージョン 0.17 を使用しており、@albertjan ソリューションは 0.11 に基づいています。@TheCodeJunkie のおかげで、彼は私にIViewRenderer

public class TheModule : NancyModule
{
    private readonly IViewRenderer _renderer;

    public TheModule(IViewRenderer renderer)
    {
           _renderer = renderer;

           Post["/sendmail"] = _ => {

                string emailBody;
                var model = this.Bind<MyEmailModel>();
                var res = _renderer.RenderView(this.Context, "email-template-view", model);

                using ( var ms = new MemoryStream() ) {
                  res.Contents(ms);
                  ms.Flush();
                  ms.Position = 0;
                  emailBody = Encoding.UTF8.GetString( ms.ToArray() );
                }

                //send the email...

           };

    }
}
于 2013-07-18T09:20:14.000 に答える