Warum gibt es zwei inkompatible session-Status-Typen in ASP.NET?
Sehe ich zwei Möglichkeiten, die arbeiten mit session-Daten in ASP.NET MVC:
-
System.Web.SessionState.HttpSessionState
erhältlichHttpApplication
-
System.Web.HttpSessionStateBase
erhältlichController
Daten werden in einer zu sein scheint, in dem anderen.
Leider der einzige gemeinsame Vorfahre dieser beiden Arten ist System.Object
, das heißt, ich kann Sie nicht erstellen Sie wiederverwendbare utility code für die Abstraktion von entweder.
Warum ist die API, auf diese Weise? Gibt es einen wichtigen Unterschied zwischen den beiden, die mir fehlen?
- Ich habe gerade das gleiche Geschwätz mit
Request
undRequestBase
. Sind es zwei parallel-Versionen der basic-API-Stücke?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In ASP.NET MVC-Abstraktionen, die über die klassische HttpContext-Objekte Request, Response, Session eingeführt wurden. Sie stellen abstrakte Klassen und ausgesetzt werden, die alle über das MVC-framework zu verbergen, die zugrunde liegenden Kontext und Vereinfachung von unit-Tests, weil abstrakte Klassen können verspottet.
Z.B. für das session-Objekt haben Sie
HttpSessionStateBase
und seine UmsetzungHttpSessionStateWrapper
.Hier ist ein Beispiel, wie das konvertieren zwischen den klassischen ASP.NET Sitzung und der Abstraktion:
Also die
System.Web.SessionState.HttpSessionState
die Sie sich beziehen, ist die zugrunde liegende session-Objekt, das zwar schon seit classic ASP.NET 1.0. Im MVC-dieses Objekt wird verpackt in eineHttpSessionStateWrapper
. Aber da ASP.NET MVC ist eine ASP.NET Anwendung erhalten Sie noch die Global.asax, in denen Sie der blanke Sitzung.new HttpRequestWrapper(HttpContext.Current.Request)
undnew HttpResponseWrapper(HttpContext.Current.Response)
.