如何在 DotVVM 视图模型中创建会话变量?

How do I create a session variable in DotVVM viewmodel?

我正在 DotVVM 中构建站点,当我尝试以下代码行时出现错误:NullReferenceException

HttpContext.Current.Session.Add ("Value", Item3);

您可以通过以下操作在 Session 中保存对象:

Session["Value"] = Item3;

您可以通过以下操作从会话中检索对象:

object value = Session["Value"];

通常,您需要将值转换为您使用的类型,因此如果 Item3 是一个字符串,那么您会这样做:

string value = (string)Session["Value"];

您也可以从您的视图访问会话变量,因此您不需要将它存储在您的视图模型中。

DotVVM 是一个 OWIN 中间件,因此您必须先配置 OWIN 才能启用会话。首先需要声明这个方法,开启ASP.NET session:

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);
}

然后在Startup.cs文件中,调用它:

app.RequireAspNetSession();

然后您可以使用 HttpContext.Current.Session["key"] 访问您的会话状态。