我有一個帶有 ASP.NET Core 中間件的面向 .NET Standard 2.0 的庫專案。它適用于將 asp.net 核心定位到 .NET 6 的應用程式。我希望能夠在 asp.net 4.x 應用程式中使用相同的中間件/庫。
是否有一個配接器類,或者我可以在庫中創建一個允許 4.x 應用程式使用 asp.net 核心的中間件的配接器類嗎?所以基本上配接器將利用 4.x 應用程式的管道并攔截與路徑匹配的 http 請求。然后將這些呼叫傳遞給庫中的 asp.net 核心中間件或業務邏輯層。
或者,我可以有兩個不同的中間件嗎?一個用于 asp.net 核心應用程式(當前),另一個用于同一庫中的 asp.net 4.x 應用程式?兩個中間件將共享相同的后端庫。
uj5u.com熱心網友回復:
為了使用 ASP.NET MVC 4 應用程式(我假設這就是您的意思)并查看Request您需要與HttpContextSystem.Web 庫中的 .Net Standard 中不可用的互動。這有點過于簡單化了,但您可以在此處閱讀更多內容。
為了克服這個問題,一種選擇是將您的圖書館安置在 3 個專案中。業務邏輯專案將針對 .Net Standard 2.0。帶有 .Net Core 中間件的專案將針對 .Net Core xx(或 .Net Standard 2.1)并參考業務邏輯專案。第三個專案將針對 .NetFX 4.6 并參考您的業務邏輯專案。這當然會產生 2 個單獨的 DLL/NuGet 包,并不理想,但可能是最簡單的解決方案。
至于原來的問題,ASP.NET MVC 4 沒有嵌入中間件的概念。您可以添加Microsoft.Owin.Host.SystemWeb包以將其引入到 MVC4 應用程式中。
來自 Microsoft 的有關 OWIN/中間件的資訊
但是,您將無法為 MVC 4 和 .Net Core 重用相同的中間件類,因為它們的依賴項和簽名不同。它還需要對您現有的 MVC 應用程式進行一些更改。
另一種選擇是創建一個IHttpModule掛鉤到最適合您的目的的HttpApplication生命周期階段并在那里執行您的業務邏輯。
public class FakeMiddlewareHttpModule : IHttpModule
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
context.BeginRequest = Context_BeginRequest;
}
private void Context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpContext context = app.Context;
var businessLogic = new BusinessLogicClass();
businessLogic.PerformATaskOnTheRequest(context.Request);
}
}
您必須在您的web.config:
<!-- Registering in Classic mode -->
<configuration>
<system.web>
<httpModules>
<add name="FakeMiddlewareHttpModule" type="FakeMiddlewareHttpModule"/>
</httpModules>
</system.web>
</configuration>
<!-- Registering in IIS7 Integrated mode -->
<configuration>
<system.webServer>
<modules>
<add name="FakeMiddlewareHttpModule" type="FakeMiddlewareHttpModule"/>
</modules>
</system.webServer>
</configuration>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/464858.html
標籤:网 asp.net 核心 欧文 中间件 .net-standard-2.0
