在Nancy中访问参数后挂钩

时间:2014-07-21 16:00:19

标签: c# lambda nancy

我想在我的模块的后挂钩中生成响应。由于我需要在某处存储响应(由我的路由和其他钩子生成),我将其附加到parameters。但是,在挂钩后访问它们不起作用:

After += ctx => // <- below errors
{
    ctx.Response = Response.AsJson(ctx.Parameters.Response);
};
  

错误1运营商&#39; + =&#39;不能应用于类型的操作数   &#39; Nancy.AfterPipeline&#39;和&#39; lambda   表达&#39;

     

错误2无法将lambda表达式转换为类型&#39; Nancy.AfterPipeline&#39;   因为它不是委托类型

我该如何使这项工作?或者有没有其他方法可以做到这一点?请注意,仅使用ctx.Request并不适用于我,因为我需要访问其他参数。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Session存储参数,以便以后在After hook中使用。例如,让我们有简单的类

[Serializable]
public class User
{
  public string Name{ get; set; }
  public int Age{ get; set; }
}

在模块中,我们可以像这样将用户分配给Session

Post["/user"] = x =>
{
    var user = this.Bind<User>();
    Session["User"] = user;

    return View["User", user];
};

在After hook中,使用Session创建响应

After += ctx =>
{
    ctx.Response = Response.AsJson(Session["User"]);
};

注意:默认情况下未启用Session,因此您需要在Bootstrapper中启用它们

public class CustomBootstrapper : DefaultNancyBootstrapper
{
  protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
  {
    base.ApplicationStartup(container, pipelines);
    CookieBasedSessions.Enable(pipelines);
  }
}

希望有所帮助