首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在自托管模式下获取当前owin上下文

在自托管模式下获取当前owin上下文
EN

Stack Overflow用户
提问于 2014-10-05 16:44:26
回答 2查看 19.2K关注 0票数 12

我需要运行我的应用程序,它在IIS和.NET CLR self host模式下都提供了一些ASP.NET Web API服务。我基于OWIN开发了我的ASP.NET Web API服务,它在两个主机上都工作得很好。现在我需要这样的东西:

代码语言:javascript
复制
public class OwinContextInfrastructure
    {
        public static IOwinContext Current
        {
            get
            {
                if (HttpContext.Current != null)
                {
                    return HttpContext.Current.GetOwinContext();
                }
                else
                {
                    // What should I do here ?
                    return null;
                }
            }
        }
    }

无论何时我需要在我的应用程序中获取当前的owin上下文。

我的代码在IIS上工作正常,但是我应该在.NET自我宿主模式下做什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-06 22:35:18

首先,我必须纠正我的问题。

HttpContext.Current在基于ASP.NET和集成的IIS pipeline.But的应用程序中可用。我们不能在没有asp.net anywhere的情况下使用这个类,即使在集成的IIS管道上也是如此。

答案:

1-在你需要IOwinContext的任何地方,你都必须使用依赖注入,例如通过构造函数注入。

2-将一切配置为基于Owin,SignalR仅基于Owin,但同时使用Web和owin,如果有服务器端视图,请使用nancy。开发自己的中间件,而不是编写IIS或ASP.NET处理程序和模块。

3-使用Autofac.Owin & AutoFac.WebApi & AutoFac.WebApi.Owin & Autofac.SignalR,你可以在你的应用程序中设置跨所有自有中间件的依赖注入。

4- Autofac将实例化web api控制器、signalr集线器和owin中间件,它将使用构造函数注入将IOwinContext实例传递给您想要的类。

我的测试在Owin IIS/Helios (没有asp.net),Owin SelfHost,甚至Owin Test Server上都没问题。

此方法类似于asp.net vNext。当您的应用程序准备好投入生产时,您可以轻松地将其迁移到asp.net vNext。

票数 1
EN

Stack Overflow用户

发布于 2014-10-06 12:26:55

您可以将Request.GetOwinContext()用于web托管和自托管。GetOwinContextHttpRequestMessage的扩展方法,在System.Web.Http.Owin.dll程序集中定义。

更新

我已经回答了你最初的问题,那就是如何在网络托管和自我托管的上下文中获得所有权。现在,通过你在评论中提出的额外问题,你已经大大拓宽了你的问题的范围。然而,有一个根本的问题。IOwinContext不是OWIN的东西,它是Katana的东西。您不能期望任何托管在OWIN上的框架以IOwinContext的形式提供上下文。ASP.NET Web API是这样做的,但并不是每个框架都应该这样。IOwinContext是对OWIN环境字典的抽象,该字典可用于任何OWIN中间件。但是,通过在框架之上工作,您不能再直接访问OWIN环境,而只能通过该特定框架决定公开上下文的方式来访问。

对于Nancy,您必须使用NancyContext来访问Items字典并查找与键"OWIN_REQUEST_ENVIRONMENT“相对应的值。对于SignalR,IRequestEnvironment属性允许您访问OWIN环境。一旦拥有了OWIN环境,就可以使用该环境创建新的OwinContext

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26201032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档