在ASP.NET 4.5.2 WebApi中使用netstandard 2.0中间件

时间:2019-04-09 13:20:11

标签: c# asp.net asp.net-core .net-core

我在 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

我该怎么办?

1 个答案:

答案 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中进行了测试。