【问题标题】:What to use instead of HttpContext when using OWIN without System.Web在没有 System.Web 的情况下使用 OWIN 时使用什么来代替 HttpContext
【发布时间】:2014-05-22 18:09:27
【问题描述】:

我们目前有一个使用 OWIN 连接的 NancyFx 项目。我们没有使用 System.Web,我们需要一些地方来放置我们的上下文,该上下文在 HttpContext 之外的请求的生命周期中存在。我们已经开始在线程静态变量上实现上下文,因此我们可以在应用程序的任何地方访问上下文,但我们担心使用异步调用会丢失这个线程静态上下文。

当您与 System.Web 分离时,您在 HttpContext 中使用什么作为静态访问器?

【问题讨论】:

    标签: c# httpcontext owin nancy system.web


    【解决方案1】:

    您可以改用 NancyContext。 NancyContext 上的 Items 字典用于存储每个请求的对象。 NancyContext 在 Nancy 应用程序的任何地方都可用。

    【讨论】:

    • 你能静态访问 NancyContext 吗?我们不想将上下文传递给我们需要它的每个方法。
    • 否,但它可用作 NancyModule 上的属性,也可用作 Before、After、OnError 挂钩的参数。你从哪里需要它?
    • 目前我们在 HttpContext 中填充有关请求状态的内容,并从应用程序中的任何位置从该上下文中提取。我们将非业务级别的对象存储在 HttpContext 中,因此我们不必通过我们调用的每个方法来传递它们。 IIS 管理每个请求的 HttpContext,因此我们始终拥有从应用程序中的任何位置访问上下文的静态访问器。
    • 我猜你只要传递 NancyContext 就可以侥幸逃脱。
    • 使 HttpContext.Current 成为静态是 MS 做过的最糟糕的事情,结果导致许多设计不佳的应用程序......
    【解决方案2】:

    这个帖子可能会回答你的问题:https://groups.google.com/forum/#!topic/nancy-web-framework/yILM4ZMrsSQ

    public class Bootstrapper : DefaultNancyBootstrapper
    {
        protected override void ConfigureRequestContainer(
            TinyIoCContainer container, NancyContext context)
        {
            base.ConfigureRequestContainer(container, context);
            container.Register<ICurrentRequest>(
              (c, o) => new CurrentRequest(context));
        }
    
        private class CurrentRequest : ICurrentRequest
        {
            public CurrentRequest(NancyContext context)
            {
                this.Context = context;
            }
    
            public NancyContext Context { get; private set; }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 2013-03-25
      相关资源
      最近更新 更多