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
}
}