ein Remix von the initial answer, so der Kern Diese Antwort ist zugreifen es sollte @Tratcher zugeschrieben werden. Es ist jedoch anders genug, es separat zu posten, anstatt eine Bearbeitung vorzuschlagen.
Angenommen, Sie eine kleine OWIN App für grundlegende Testzwecken machen wollen (zB als Stummel/Fälschung für eine größere API, wenn Integrationstests tun), einschließlich einer leicht hakish Weise Sitzungsstatus verwenden würde gut funktionieren .
Erstens, müssen Sie diese:
using Microsoft.Owin;
using Microsoft.Owin.Extensions;
using Owin;
Mit denen können Sie eine Hilfsmethode erstellen:
public static void RequireAspNetSession(IAppBuilder app)
{
app.Use((context, next) =>
{
var httpContext = context.Get<HttpContextBase>(typeof(HttpContextBase).FullName);
httpContext.SetSessionStateBehavior(SessionStateBehavior.Required);
return next();
});
// To make sure the above `Use` is in the correct position:
app.UseStageMarker(PipelineStage.MapHandler);
}
Man könnte auch, dass als Erweiterung Methode erstellen, wie die ursprüngliche Antwort tat .
Beachten Sie, dass, wenn Sie nicht die UseStageMarker
verwenden würde dieser Fehler auftritt:
Server Error in '/' Application.
'HttpContext.SetSessionStateBehavior' can only be invoked before 'HttpApplication.AcquireRequestState' event is raised.
Auf jeden Fall mit den oben genannten Sie jetzt in Ihrem Httpcontext OWIN App wie diese verwenden:
public void Configuration(IAppBuilder app)
{
RequireAspNetSession(app);
app.Run(async context =>
{
if (context.Request.Uri.AbsolutePath.EndsWith("write"))
{
HttpContext.Current.Session["data"] = DateTime.Now.ToString();
await context.Response.WriteAsync("Wrote to session state!");
}
else
{
var data = (HttpContext.Current.Session["data"] ?? "No data in session state yet.").ToString();
await context.Response.WriteAsync(data);
}
});
}
Wenn Sie IIS Express mit dieser kleinen App anwerfen müssen Sie zuerst erhalten:
No data in session state yet.
Dann, wenn Sie zu http://localhost:12345/write
gehen erhalten Sie:
Wrote to session state!
Dann, wenn Sie auf diesem Host auf andere URL zurück/Geht Sie erhalten:
11/4/2015 10:28:22 AM
oder etwas ähnliches.
Meine Sitzung ist immer noch null. Was kann das verursachen? – Rastko
Das gleiche hier, es ist immer noch 'null' !! – gdmanandamohon