我在 netstandard2.0 中创建了一个库,并在 netcoreapp2.0 Web应用程序中使用了它。
在我的图书馆中,我刚刚创建了一个我在 core2 应用中调用的中间件。
在netcoreapp2.0中,我在IApplicationBuilder上创建了一个扩展方法来调用中间件。
public static IApplicationBuilder UseSeriLogLogicalProperties(this IApplicationBuilder applicationBuilder)
{
return applicationBuilder.UseMiddleware<LogicalPropertiesLoggingMiddleware>();
}
然后在我的示例项目(核心)中,我只需在configure()部分的startup.cs中调用此扩展方法。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
app.UseSeriLogLogicalProperties();
}
现在,我想在另一个示例中将此中间件称为 net452 。
我该怎么办?
答案 0 :(得分:0)
我找到了解决方案。 您可以在项目的AssemblyInfo.cs中使用PreApplicationStartMethod,然后可以订阅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中进行了测试。