Nano Hash - криптовалюты, майнинг, программирование

Как использовать ПО промежуточного слоя Owin на основе IAppBuilder в ASP.NET 5

ASP.NET 5 (aspnet vnext) основан на OWIN, как и Katana, но имеет другие абстракции. Примечательно, что IAppBuilder был заменен на IApplicationBuilder. Многие библиотеки промежуточного ПО зависят от IAppBuilder и не были обновлены для поддержки ASP.NET 5.

Как я могу использовать это промежуточное ПО OWIN в промежуточном ПО APS.NET 5. Оба основаны на OWIN, поэтому это должно быть возможно.

Microsoft.AspNet.Builder.OwinExtensions предоставляет метод UseOwin, но он основан на низкоуровневых сигнатурах OWIN, поэтому его нельзя использовать с методами, ожидающими IAppBuilder.

09.06.2015

Ответы:


1

Изменить: теперь вы можете использовать для этого пакет AspNet.Hosting.Katana.Extensions.


Вот немного другая версия, в которой используется AppBuilder.DefaultApp:

public static IApplicationBuilder UseOwinAppBuilder(this IApplicationBuilder app, Action<IAppBuilder> configuration)
{
    if (app == null)
    {
        throw new ArgumentNullException(nameof(app));
    }

    if (configuration == null)
    {
        throw new ArgumentNullException(nameof(configuration));
    }

    return app.UseOwin(setup => setup(next =>
    {
        var builder = new AppBuilder();
        var lifetime = (IApplicationLifetime) app.ApplicationServices.GetService(typeof(IApplicationLifetime));

        var properties = new AppProperties(builder.Properties);
        properties.AppName = app.ApplicationServices.GetApplicationUniqueIdentifier();
        properties.OnAppDisposing = lifetime.ApplicationStopping;
        properties.DefaultApp = next;

        configuration(builder);

        return builder.Build<Func<IDictionary<string, object>, Task>>();
    }));
}

Обратите внимание, что ссылка на Microsoft.Owin делает ваше приложение несовместимым с dnxcore50 (Core CLR).

11.06.2015
  • Я не понимаю всех последствий, но это работает, и кажется, что это может быть более надежным из-за дополнительных назначений свойств. Просто чтобы убедиться, что я ничего не упустил, эта реализация также требует ссылки на Microsoft.Owin, что делает реализации одинаковыми в этом отношении? 18.06.2015
  • Безусловно, это зависит от AppBuilder, который является частью Microsoft.Owin. Попытка реорганизовать его, чтобы избежать ссылок на Microsoft.Owin, была бы хорошим упражнением, но я не уверен, что оно того стоило бы, поскольку вам все равно придется портировать промежуточное ПО OWIN/Katana, которое вы хотели бы использовать, в Core CLR. 18.06.2015
  • Ссылка @GeorgeMauer исправлена. 08.05.2017
  • @Pinpoint Мне очень нужен этот метод. Как я могу использовать этот метод в моем файле startup.cs(dotnetcore2.0). Как я использую это в app.UseOwin(pipeline =› { pipe(next =› OwinHello); }); Пожалуйста, предложите 23.08.2017
  • Пакет AspNet.Hosting.Katana.Extensions теперь устарел, есть ли какой-либо другой пакет nuget с открытым исходным кодом с этим методом? Не хочу копировать его из проекта в проект =( 29.06.2021

  • 2

    Часто цитируемая ссылка на совместимость фреймворков — это метод расширения. созданный Thinktecture для поддержки их IdentityServer3 на ASP.NET 5.

    Этот метод специфичен для IdentityServer и не поддерживает обработку запроса каким-либо промежуточным программным обеспечением, зарегистрированным позже в конвейере AspNet (он не вызывает следующий компонент).

    Это адаптирует метод для устранения этих недостатков:

    internal static class IApplicationBuilderExtensions
    {
      public static void UseOwin(
        this IApplicationBuilder app,
        Action<IAppBuilder> owinConfiguration )
      {
        app.UseOwin(
          addToPipeline =>
            {
              addToPipeline(
                next =>
                  {
                    var builder = new AppBuilder();
    
                    owinConfiguration( builder );
    
                    builder.Run( ctx => next( ctx.Environment ) );
    
                    Func<IDictionary<string, object>, Task> appFunc =
                      (Func<IDictionary<string, object>, Task>)
                      builder.Build( typeof( Func<IDictionary<string, object>, Task> ) );
    
                    return appFunc;
                  } );
            } );
      }
    }
    

    Его можно использовать следующим образом:

    app.UseOwin(
        owin =>
            {
                // Arbitrary IAppBuilder registrations can be placed in this block
    
                // For example, this extension can be provided by
                // NWebsec.Owin or Thinktecture.IdentityServer3
                owin.UseHsts();
            } );
    
    // ASP.NET 5 components, like MVC 6, will still process the request
    // (assuming the request was not handled by earlier middleware)
    app.UseMvc();
    
    09.06.2015
  • При попытке реплицировать IApplicationBuilderExtension, найденный в предоставленной ссылке, я получаю эту ошибку: Ожидается имя метода. Упомянутая строка — это строка, содержащая второе упоминание addToPipeline. 10.06.2015
  • большое спасибо за ваш ответ @ vossad01. У меня действительно есть ссылка Owin ( Microsoft.AspNet.Owin не может быть разрешена, но Microsoft.Owin может быть) и дает тип addToPipeline как IAppBuilder. 10.06.2015
  • @MRainzo, похоже, вам не хватает пакета NuGet Microsoft.AspNet.Owin. Если добавление этого не решит проблему, мне, вероятно, потребуется узнать, какую версию ASP.NET 5 вы используете. То, что вы описываете, предполагает, что вам не хватает упомянутой библиотеки и у вас есть код выше (а не связанный код). Таким образом, он видит UseOwin как вызов вышеуказанного метода (который будет иметь лямбда-параметр типа IAppBuilder). 10.06.2015
  • когда я попробовал связанный метод @vossad01, он выдал ошибку в app.UseOwin. Затем я попытался воспроизвести приведенный выше код и получил ошибку, о которой я вам сообщил. Все еще не могу решить Microsoft.AspNet.Owin. Используя @System.Environment.Version.ToString(), я получил номер версии 4.0.30319.0. 10.06.2015
  • @MRainzo, давайте продолжим обсуждение в чате. 10.06.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..