在OWIN托管的Web API 2中,OperationContext.Current和HttpContext.Current为null

时间:2017-03-03 05:44:41

标签: c# wcf asp.net-web-api2 owin operationcontext

我正在将一些WCF服务转移到Web API。

OperationContext.Current通常在WCF中用于​​记录和登台。

  

但我看到HttpContext.Current和OperationContext.Current为   空。

我使用了一个框架,它使用OperationContext.Current来获取当前线程的执行上下文。因此,如果我选择其他方式,我必须将我的自定义方法添加到框架,我试图避免。

问题:

  • 我可采用的解决方法是什么?
  • 如果必须“添加到框架”,我可以使用什么来获取当前上下文?

OWIN启动:

public class Startup
{
    public void Configuration(IAppBuilder appBuilder)
    {
         HttpConfiguration config = new HttpConfiguration();
         HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"];
         listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;

         config.MapHttpAttributeRoutes();
         config.MapODataServiceRoute(
                routeName: "ODataRoute",
                routePrefix: "Data",
                model: GetModel()
         );
         config.EnsureInitialized();
         appBuilder.UseWebApi(config);

    }
}

使用

调用启动

WebApp.Start<Startup>(rootUri);

CustomFilterAttribute.cs

public class CustomFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        var caller = OperationContext.Current; //null
        caller = System.Web.HttpContext.Current; //null
        caller = actionContext.RequestContext.Principal.Identity as WindowsIdentity; //desired
    }
}

0 个答案:

没有答案