LinqToEntitiesDataController MVC 4 單頁應用程式 - Session 变量

本文关键字:程式 Session 变量 MVC LinqToEntitiesDataController | 更新日期: 2023-09-27 18:32:26

SPA MVC4 的新增功能,尝试将会话变量从帐户控制器传递给 LinqToEntitiesDataController 以通过以下方式识别用户:

                      using (DALEntities db = new DALEntities())
                        {
                            string PHN = (from p in db.Patients
                                          where p.UserName == model.UserName
                                          select p.PHN).First();
                            Session["P"] = PHN;
                        }

在LinqToEntitiesDataController中,我尝试按如下方式使用该变量:

public partial class DALController : LinqToEntitiesDataController<MyVDC.Models.DALEntities>
    {
        public IQueryable<MyVDC.Models.TestModel> GetTestModel()
        {
            **string phn = (string)Session["P"];**
            return ObjectContext.TestModels.Where(b => b.PHN == phn).OrderBy(b => b.ID);
        }
}

我收到此错误:

The name 'Session' does not exist in the current context

这是唯一的方法,还是有更好的方法可以在此控制器中使用会话变量。

我还尝试在帐户控制器中使用:

 HttpContext.Current.Session["P"] = PHN;

但是我收到此错误:

'System.Web.HttpContextBase' does not contain a definition for 'Current' and no extension method 'Current' accepting a first argument of type 'System.Web.HttpContextBase' could be found 

提前谢谢。

LinqToEntitiesDataController MVC 4 單頁應用程式 - Session 变量

public class SessionHttpControllerRouteHandler : HttpControllerRouteHandler
{
    protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext)
    {
        return new SessionHttpControllerHandler(requestContext.RouteData);
    }
}
public class SessionHttpControllerHandler : HttpControllerHandler, IRequiresSessionState
{
    public SessionHttpControllerHandler(RouteData routeData) : base(routeData) { }
}

创建会话支持 HttpControllerHandler,并在 Global.asax 中路由此类条目。

    routes.Add("SessionApis",
        new HttpWebRoute(
            url: "api/{controller}/{id}",
            defaults: new RouteValueDictionary(new {id = RouteParameter.Optional}),
            routeHandler: new SessionHttpControllerRouteHandler()
    ));

但是,我认为 ApiController 非常适合无会话使用。 所以可扩展和 REST 原则。

LinqToEntitiesDataController 路由添加到自定义区域注册类( DALRouteRegistration 类?更改基架默认区域寄存器代码。

    RouteTable.Routes.MapHttpRoute(
        "DAL", // Route name
        "api/DAL/{action}", // URL with parameters
        new { controller = "DAL" } // Parameter defaults
    );

    RouteTable.Routes.Add("SessionDALApis",
        new HttpWebRoute(
            url: "api/DAL/{action}",
            defaults: new RouteValueDictionary(new { controller = "DAL" }),
            routeHandler: new SessionHttpControllerRouteHandler()
    ));

怎么样?