我想在我的模块的后挂钩中生成响应。由于我需要在某处存储响应(由我的路由和其他钩子生成),我将其附加到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
并不适用于我,因为我需要访问其他参数。
答案 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);
}
}
希望有所帮助