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
提前谢谢。
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()
));
怎么样?