asp.net-mvc – ASP.NET MVC:确保用户始终拥有会话变量集
|
考虑一个需要设置会话变量的ASP.NET MVC应用程序.它在整个应用程序中使用.它可以通过读取浏览器cookie上的散列值或者在用户登录后设置. 在WebForms母版页模型中,我将检查母版页的Page_Load().也许不是最终的事件,但它很容易找到. 您将如何检查并强制ASP.NET MVC中存在会话变量?考虑到这个问题可能不涉及用户登录详细信息,但可能不涉及其他一些数据(可能是第一次访问时间). 解决方案尝试 public void Application_BeginRequest(Object source,EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
context.Session["SomeDateTime"] = DateTime.Now.ToString();
// results in Object reference not set to an instance of an object.
// context.Session is null
}
解决方法你有两个选择.1.在基本控制器的Initialize功能中放置逻辑 假设所有控制器都从基本控制器继承,您可以在基本控制器的Execute()函数的覆盖中放置所需的逻辑. public class BaseController : Controller
{
public BaseController()
{
}
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
// check if the user has the value here using the requestContext.HttpContext object
}
{
2.使用Global.asax void Application_PreRequestHandlerExecute(Object source,EventArgs e)函数 public void Application_PreRequestHandlerExecute(Object source,EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
// use an if statement to make sure the request is not for a static file (js/css/html etc.)
if(context != null && context.Session != null)
{
// use context to work the session
}
}
注意:第二部分适用于任何ASP.NET应用程序,WebForms或MVC. 至于强制它们有一个特定的会话变量,它真的非常开放.您可以重定向到某个页面,以便他们填写表单或选择一个选项.或者,如果找不到,则可能只有一个默认值设置为某个会话密钥. 编辑 在玩这个时,我注意到Application_PreRequestHandlerExecute方法存在很大问题.正在为服务器发出的任何请求调用事件处理程序,无论是.css / .js / .html文件.我不确定这是我的工作站设置方式的问题,还是ASP.NET/IIS的工作原理,所以我确保在实现上述方法时不会在所有请求上调用它. 由于之前的原因,我用if语句将要完成的工作包装在会话中. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 值得学习经典ASP?
- asp.net – Azure服务架构与Docker一样吗?
- asp.net-mvc – ASP.NET MVC WebSite中的ERR_EMPTY_RESPONS
- iis-7 – ASP.NET应用程序吃内存. Application / Session对
- 在asp.net App_Code目录中使用Nemerle
- asp.net – 仅允许匿名用户通过web.config授权
- asp.net-mvc – 如何通过属性过滤器在MVC中设置Razor布局?
- 在ASP.NET或ASP.NET MVC中生成管理界面
- asp.net – 使用/ signalr / ping调用时使用长轮询
- ASP.Net – 在负载平衡环境中处理会话数据?
- 在ASP.NET中上传文件时运行病毒扫描
- asp.net-mvc – 带有并发检查的ASP.NET MVC实体框
- asp.net-mvc – LINQ to Entities无法识别方法异
- .net – vNext是完全“基于约定的编程”吗?
- 具有Entity Framework Code Only和ASP.NET MVC的
- asp.net-mvc – 如何在MVC Unobtrusive Validati
- asp.net-mvc – Html.BeginForm使用FormMethod.G
- asp.net-mvc – 通过伪造上下文测试:实体框架
- asp.net-mvc – 发送asp.net mvc动作结果里面的电
- asp.net – 401客户端’协商’,服务器’协商,NTL
