簡體   English   中英

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

[英]Use netstandard 2.0 middleware into ASP.NET 4.5.2 WebApi

and I use it in an web application.我在創建了一個庫,並在 Web 應用程序中使用它。

app.在我的庫中,我剛剛創建了一個在應用程序中調用的中間件。

在我的 netcoreapp2.0 中,我在 IApplicationBuilder 上創建了一個擴展方法來調用中間件。

public static IApplicationBuilder UseSeriLogLogicalProperties(this IApplicationBuilder applicationBuilder)
    {
        return applicationBuilder.UseMiddleware<LogicalPropertiesLoggingMiddleware>();
    }

然后在我的示例項目(核心)中,我只是在我的 startup.cs 中的 Configure() 部分調用此擴展方法。

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
    {
        app.UseSeriLogLogicalProperties();
    }

.現在我想在另一個示例中調用這個中間件,這次是在

我怎么能那樣做?

我找到了解決方案。 您可以在您的項目的 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 中測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM