OperationContext.Current и HttpContext.Current равны нулю в размещенном в OWIN Web API 2.

Я перемещаю некоторые из служб 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 ответов

Другие вопросы по тегам