Ta odpowiedź jest remix od the initial answer, więc sedno należy go przypisać do @Tratchera. Jest jednak na tyle różne, by opublikować go osobno zamiast sugerować zmianę.
Przypuśćmy chcesz zrobić mały OWIN aplikację dla podstawowych celów testowych (np jako zalążek/fałszywe dla większego API robiąc testy integracyjne), w tym lekko hakish sposób wykorzystania stanu sesji będzie działać dobrze .
Najpierw trzeba te:
using Microsoft.Owin;
using Microsoft.Owin.Extensions;
using Owin;
Z tych można utworzyć metody pomocnika:
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);
}
Można również utworzyć, że jako metodę rozszerzenia jak oryginał odpowiedź zrobił .
Należy pamiętać, że jeśli nie będzie używać UseStageMarker
wystąpienia tego błędu:
Server Error in '/' Application.
'HttpContext.SetSessionStateBehavior' can only be invoked before 'HttpApplication.AcquireRequestState' event is raised.
W każdym razie z powyższego można teraz używać HttpContext w swojej aplikacji OWIN tak:
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);
}
});
}
Jeśli odpalić IIS Express, z tej małej aplikacji musisz najpierw dostać:
No data in session state yet.
Następnie jeśli pójdziesz do http://localhost:12345/write
dostaniesz:
Wrote to session state!
Następnie, jeśli wrócisz/przejść do innego adresu URL na tym hoście dostaniesz:
11/4/2015 10:28:22 AM
lub coś podobnego.
Moja sesja jest nadal pusta. Co może to spowodować? – Rastko
To samo tutaj, nadal jest 'null' !! – gdmanandamohon