ASP.NET MVC在基控制器中處理Session
當(dāng)需要跨頁面共享信息的時(shí)候,Session是首當(dāng)其沖的選擇,最典型的例子就是:在處理登錄和購物車邏輯的時(shí)候需要用到Session。在MVC中,可以把處理Session的邏輯放在一個(gè)泛型基控制器中,但需要注意的是:在判斷沒有登錄就跳轉(zhuǎn)到登錄頁的時(shí)候,需要把出錯(cuò)控制器和登錄控制器排除在外。
using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1.Controllers
{
public class BaseController<TModel> : Controller
{
private const string loginSession = "LoginSession";
private const string shoppingCartSession = "ShoppingCartSession";
private const string errorController = "Error";
private const string LoginController = "Login";
private const string LoginAction = "Login";
//沒有登錄的跳轉(zhuǎn)到登錄頁
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
//如果沒有登錄,且不是出錯(cuò)和登錄控制器就跳轉(zhuǎn)到登錄頁
if (!NoNeedSessionController(requestContext) && !HasLoginSession())
{
GoToAction(requestContext, Url.Action(LoginAction, LoginController));
}
}
//對(duì)哪些不需要依賴緩存的控制器 返回true
private bool NoNeedSessionController(RequestContext requestContext)
{
//從路由數(shù)據(jù)中取到當(dāng)前controller的名稱
var c = requestContext.RouteData.Values["controller"].ToString().ToLower();
//把不需要依賴Session的控制器名稱放到列表中
var noNeedSessionList = new List<string>
{
errorController.ToLower(),
LoginController.ToLower()
};
return noNeedSessionList.Contains(c);
}
//跳轉(zhuǎn)到某個(gè)視圖
private void GoToAction(RequestContext requestContext, string action)
{
requestContext.HttpContext.Response.Clear();
requestContext.HttpContext.Response.Redirect(action);
requestContext.HttpContext.Response.End();
}
//登錄的時(shí)候判斷是否有Session
protected bool HasLoginSession()
{
return Session[loginSession] != null;
}
//判斷購物車是否有Session
protected bool HasShoppingCartSession()
{
return Session[shoppingCartSession] != null;
}
//從Session中獲取登錄模型的實(shí)例
protected TModel GetLoginModelFromSession()
{
return (TModel)this.Session[loginSession];
}
//從Session中獲取購物車模型的實(shí)例
protected TModel GetShoppingCartModelFromSession()
{
return (TModel)this.Session[shoppingCartSession];
}
//設(shè)置登錄Session
protected void SetLoginSession(TModel loginModel)
{
Session[loginSession] = loginModel;
}
//設(shè)置購物車Session
protected void SetShoppingCartSession(TModel shoppingCartModel)
{
Session[shoppingCartSession] = shoppingCartModel;
}
//讓登錄Session失效
protected void AbandonLoginSession()
{
if (HasLoginSession())
{
Session.Abandon();
}
}
//讓購物車Session失效
protected void AbandonShoppingCartSession()
{
if (HasShoppingCartSession())
{
Session.Abandon();
}
}
}
}讓其他控制器派生于基控制器:
using System.Web.Mvc;
using MvcApplication1.Models;
namespace MvcApplication1.Controllers
{
public class LoginController : BaseController<LoginModel>
{
public ActionResult Index()
{
//把登錄模型實(shí)例保存到Session中
LoginModel loginModel = new LoginModel();
SetLoginSession(loginModel);
//從Session中獲取登錄模型實(shí)例
LoginModel sessioModel = GetLoginModelFromSession();
//使登錄Session失效
AbandonLoginSession();
return View();
}
}
}到此這篇關(guān)于ASP.NET MVC在基控制器中處理Session的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 如何在ASP.NET Core中使用Session的示例代碼
- 如何解決asp.net負(fù)載均衡時(shí)Session共享的問題
- Asp.Net Core中基于Session的身份驗(yàn)證的實(shí)現(xiàn)
- 淺談ASP.NET Core中間件實(shí)現(xiàn)分布式 Session
- 解析Asp.net Core中使用Session的方法
- asp.net(C#)清除全部Session與單個(gè)Session的方法
- 詳解ASP.NET中Session的用法
- ASP.NET ASHX中獲得Session的方法
- ASP.NET將Session保存到數(shù)據(jù)庫中的方法
- asp.net session的使用與過期實(shí)例代碼
- Asp.net中判斷一個(gè)session是否合法的方法
相關(guān)文章
sqlserver 批量數(shù)據(jù)替換助手V1.0版發(fā)布
前段時(shí)間網(wǎng)站被掛馬,數(shù)據(jù)庫表中很多文本字段都被加上了一段js腳本。修復(fù)完程序漏洞之后便開始著手清理這些被注入的數(shù)據(jù),其間參考了一些網(wǎng)上的方法,大都是寫一個(gè)存儲(chǔ)過程進(jìn)行一個(gè)表一個(gè)表逐一清理。2011-10-10
動(dòng)態(tài)改變ASP.net頁面標(biāo)題和動(dòng)態(tài)指定頁面樣式表的方法
動(dòng)態(tài)改變ASP.net頁面標(biāo)題和動(dòng)態(tài)指定頁面樣式表的方法...2007-04-04
如何在ASP.NET Core 的任意類中注入Configuration
這篇文章主要介紹了如何在 ASP.NET Core 的任意類中注入Configuration ,幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下2021-04-04
.NET讀寫Excel工具Spire.Xls使用 Excel文件的控制(2)
這篇文章主要為大家詳細(xì)介紹了.NET讀寫Excel工具Spire.Xls使用,Excel文件的控制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
vb.net借助剪貼板將圖片導(dǎo)入excel內(nèi)
這篇文章主要介紹了vb.net將圖片導(dǎo)入到excel的方法,只要借助剪貼板將圖片粘貼到excel中就可以完成了,大家參考使用吧2014-01-01
詳解ASP.NET Core 網(wǎng)站發(fā)布到Linux服務(wù)器
本篇文章主要介紹了ASP.NET Core 網(wǎng)站發(fā)布到Linux服務(wù)器 。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
Asp.Net在線預(yù)覽Word文檔的解決方案與思路詳解
這篇文章主要介紹了Asp.Net在線預(yù)覽Word文檔的解決方案與思路,大致思路是先將Word文檔轉(zhuǎn)換Html,再預(yù)覽Html,需要注意電腦安裝Office,需要的朋友可以參考下2022-04-04

