wake-up-neo.com

HttpContext in der .net-Standardbibliothek

Ich arbeite an einigen Projekten, von denen eines eine ASP.NET 4.5-Anwendung ist und das andere ein .Net Core API 1.1-Projekt ist. Die asp.net-Anwendung verwendet HttpContext-Klassen, um Cookies und Seitenkopfzeilen zu lesen. Jetzt muss ich dies in eine .net-Standardbibliothek verschieben, die von beiden Projekten verwendet werden kann. Ich finde HttpContext nicht im .net Standard-SDK. Irgendwelche Vorschläge?

11
Vishal A

Es gibt ein Problem bei Ihrem Ansatz: .NET Standard ist die einfachste verfügbare .NET-Implementierung, dh es werden nur grundlegende Funktionen implementiert, die Plattform- und Szenario-agnostisch sind.
HttpContext ist sowohl in .NET Framework als auch in .NET Core vorhanden (beide implementieren übrigens .NET Standard), sind jedoch webspezifisch und in .NET Standard nicht vorhanden.

Sie haben also drei Möglichkeiten:

  1. Richten Sie das .NET Framework aus und verwenden Sie System.Web.HttpContext.
  2. Target .NET Core und verwenden Sie Microsoft.AspNetCore.Http.HttpContext
  3. Verschieben Sie die Logik, die HttpContext verwendet, aus dem .NET Standard-Projekt

Beachten Sie jedoch, dass diese Klassen sehr unterschiedlich sind. Die .NET Core-Version wurde für ASP.NET Core erstellt, die sich erheblich von ASP.NET 4.5 und älteren Versionen unterscheidet.

13

Ab .NETStandard 2.0 können Sie mit HttpContext arbeiten.

Ihre .csproj-Datei sieht ungefähr so ​​aus:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
</Project>

Hinweis: Dies ist eine leere Projektdatei, daher können andere Abhängigkeiten aufgeführt sein (d. H. <ItemGroup>...</ItemGroup>).

Um das erforderliche Nuget-Paket zu installieren, führen Sie einfach den folgenden Befehl dotnet cli aus oder installieren Sie es mit dem NuGet Package Manager.

dotnet add package Microsoft.AspNetCore.Http.Abstractions
4
pimbrouwers

Ich muss das [Cookies und Seitenkopf lesen] in eine .NET-Standardbibliothek verschieben, die von beiden Projekten verwendet werden kann.

Mach das nicht.

Nehmen wir an, Sie führen eine Operation X für die Daten aus, die Sie aus den Cookies lesen. Sie können diesen Vorgang X stattdessen in die Bibliothek verschieben. Die Aufgabe von ASP.NET-Projekten besteht darin, die Anforderungspipeline zu verarbeiten. Das Lesen der Kekse gehört dort.

1
gldraphael

Ich bin mit diesen Antworten nicht einverstanden und dem Nicht-Sinn, nur HttpContext im Webprojekt zu haben. Das ist eigentlich eng gekoppelt, da Sie Code wiederverwenden möchten und somit eine Klassenbibliothek im .net-Core OR .net-Standard SOLLTE die HttpContext verwenden können.

In einem .NET-Standard möchten Sie also Folgendes hinzufügen:

Microsoft.AspNetCore.Http.Abstractions

Leider gibt es so viele Unterschiede zu dem neuen HttpContext HttpContext.Current fehlt und somit Session und Request etc ..

(Ja, ich bekomme die Entwurfsmuster und wieso ich sie aussortieren und sie testbarer machen muss)

Hier ist ein kleiner Trick, den Sie auch ziehen können, um Current zu erhalten.

namespace System.Web
{
    public static class HttpContext
        {
            private static Microsoft.AspNetCore.Http.IHttpContextAccessor m_httpContextAccessor;


    public static void Configure(Microsoft.AspNetCore.Http.IHttpContextAccessor httpContextAccessor)
        {
            m_httpContextAccessor = httpContextAccessor;
        }


        public static Microsoft.AspNetCore.Http.HttpContext Current
        {
            get
            {
                return m_httpContextAccessor.HttpContext;
            }
        }

    }
}
0
Tom Stickel

Ich stimme der obigen Antwort zu, wenn Sie die netstandard-Bibliotheken möglichst einfach und frei von Webanfragen halten möchten. Es gibt ein System.Net.Http-Nuget-Paket, das auf den .net-Standard abzielt. Dies kann verwendet werden, wenn 4.6.x für das vollständige Framework und für den .net-Core aktualisiert wird, wenn Sie eine Bibliothek erstellen und nicht den Aufwand von asp.net core haben möchten. 

0
Kentonbmax