#c# #asp.net #asp.net-core #.net-core
#c# #asp.net #asp.net-core #.net-ядро
Вопрос:
Я создал библиотеку в netstandard2.0 и использую ее в веб-приложении netcoreapp2.0.
В моей библиотеке я только что создал промежуточное программное обеспечение, которое я вызываю в своем приложении core2.
В моем netcoreapp2.0 я создал метод расширения в IApplicationBuilder для вызова промежуточного программного обеспечения.
public static IApplicationBuilder UseSeriLogLogicalProperties(this IApplicationBuilder applicationBuilder)
{
return applicationBuilder.UseMiddleware<LogicalPropertiesLoggingMiddleware>();
}
Затем в моем примере проекта (core) Я просто вызываю этот метод расширения в моем startup.cs в разделе Configure().
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
app.UseSeriLogLogicalProperties();
}
Теперь я хотел бы вызвать это промежуточное программное обеспечение в другом примере, на этот раз в net452.
Как я мог это сделать?
Комментарии:
1. Старая библиотека Web API несовместима с новой ASP.NET Я думаю, что основное промежуточное программное обеспечение.
2. Без перекрестного таргетинга? Вы не можете.
netstandard2.0
требуется минимум .NET Framework 4.6.1. Плюс то, что сказал джуунас:P Возможно, вы захотите настроить OWIN вместо того, чтобы вы хотели, чтобы он работал на обоих (при условии, что ваши библиотеки не используют ничего изMicrosoft.AspNetCore.*
илиSystem.Web.*
пространств имен): learn.microsoft.com/en-us/aspnet/core/fundamentals /…3. @Tseng является ли мой ответ лучшим решением, чем использование OWIN? Спасибо
Ответ №1:
Я нашел решение. Вы можете использовать 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.