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

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 Self Host 模式下我应该怎么做?

最佳答案

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

更新

我已经回答了您最初的问题,即如何在网络托管和自托管中获取 OWIN 上下文。现在,通过您在评论中的附加问题,您大大拓宽了问题的范围。但是有一个根本性的问题。 IOwinContext 不是 OWIN 的东西,它是 Katana 的东西。您不能指望 OWIN 上托管的任何框架以 IOwinContext 的形式提供上下文。 ASP.NET Web API 确实如此,但并非每个框架都应该如此。 IOwinContext 是对 OWIN 环境字典的抽象,该字典可用于任何 OWIN 中间件。但是,通过在框架之上工作,您不能再直接访问 OWIN 环境,而只能通过该特定框架决定公开上下文的方式。

对于 Nancy,您必须使用 NancyContext 来访问 Items 字典并查找与“OWIN_REQUEST_ENVIRONMENT”键对应的值。对于 SignalR,EnvironmentIRequest 属性可让您访问 OWIN 环境。拥有 OWIN 环境后,您可以使用该环境创建一个新的 OwinContext

关于asp.net - 在自主机模式下获取当前的 owin 上下文,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26201032/

10-17 01:46