Я нашел решение.Вы можете использовать PreApplicationStartMethod в AssemblyInfo.cs вашего проекта, затем вы можете подписать BeginRequest.
Таким образом, для каждого запроса вашего приложения вы будете передавать метод, чтобы вы могли делать то, что вы хотите.
Сначала создайте класс, который будет вызываться для каждого запроса
public class YourModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest += Application_BeginRequest;
}
private void Application_BeginRequest(object source, EventArgs e)
{
var application = (HttpApplication)source;
var context = application.Context;
//your code
}
}
Затем создайте другой класс, который будет вызываться в AssemblyInfo.cs, который будет вызывать класс выше
[EditorBrowsable(EditorBrowsableState.Never)]
public static class PreApplicationStartCode
{
private static bool startWasCalled;
public static void Start()
{
if (startWasCalled)
{
return;
}
startWasCalled = true;
DynamicModuleUtility.RegisterModule(typeof(YourModule));
}
}
Затем в AssemblyInfo.cs
[assembly: PreApplicationStartMethod(typeof(PreApplicationStartCode), "Start")]
Поэтому, когда вы будете вызывать действие из контроллера, вы будете каждый раз передавать метод YourModule.Application_BeginRequest (), как промежуточное ПО в основных приложениях.
Протестировано вNet452 WebApi.