好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁(yè) > 知識(shí)庫(kù) > Asp.net Mvc 身份驗(yàn)證、異常處理、權(quán)限驗(yàn)證(攔截器)實(shí)現(xiàn)代碼

Asp.net Mvc 身份驗(yàn)證、異常處理、權(quán)限驗(yàn)證(攔截器)實(shí)現(xiàn)代碼

熱門標(biāo)簽:電話機(jī)器人廣告話術(shù) 保山電話外呼管理系統(tǒng)怎么用 使用智能電話機(jī)器人違法嗎 外呼系統(tǒng)用員工身份證 朝陽(yáng)市地圖標(biāo)注 東莞語(yǔ)音電銷機(jī)器人排名 淘寶地圖標(biāo)注如何做 蘇州銷售外呼系統(tǒng)預(yù)算 太原外呼電銷機(jī)器人費(fèi)用
1、用戶登錄
驗(yàn)證用戶是否登錄成功步驟直接忽略,用戶登錄成功后怎么保存當(dāng)前用戶登錄信息(session,cookie),本文介紹的是身份驗(yàn)證(其實(shí)就是基于cookie)的,下面看看代碼。
引入命名空間
using System.Web.Security;
復(fù)制代碼 代碼如下:

Users ModelUser = new Users() { ID = 10000, Name = UserName, UserName = UserName, PassWord = PassWord, Roles = "admin" };//用戶實(shí)體
string UserData = SerializeHelper.Instance.JsonSerializeUsers>(ModelUser);//序列化用戶實(shí)體
//保存身份信息,參數(shù)說(shuō)明可以看提示
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, UserName, DateTime.Now, DateTime.Now.AddHours(12), false, UserData);
HttpCookie Cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(Ticket));//加密身份信息,保存至Cookie
Response.Cookies.Add(Cookie);

現(xiàn)在身份信息就保存到cookie中了,如果有場(chǎng)景需要用到當(dāng)前用戶的用戶ID或者別的信息的時(shí)候該怎么辦呢?
那么,我們重新在cookie中獲取身份信息,然后解密,再反序列化成用戶實(shí)體就OK了。
復(fù)制代碼 代碼如下:

/// summary>
/// 獲取用戶登錄信息
/// /summary>
/// returns>/returns>
public Users GetUser()
{
if (HttpContext.Current.Request.IsAuthenticated)//是否通過(guò)身份驗(yàn)證
{
HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];//獲取cookie
FormsAuthenticationTicket Ticket = FormsAuthentication.Decrypt(authCookie.Value);//解密
return SerializeHelper.Instance.JsonDeserializeUsers>(Ticket.UserData);//反序列化
}
return null;
}

2、權(quán)限驗(yàn)證
這里用到的是MVC中的action攔截器(重寫OnActionExecuting),在action執(zhí)行之前會(huì)先運(yùn)行攔截器中的代碼。這里同時(shí)可以身份驗(yàn)證是否過(guò)期。
復(fù)制代碼 代碼如下:

/// summary>
/// 權(quán)限驗(yàn)證
/// /summary>
public class AuthAttribute : ActionFilterAttribute
{
/// summary>
/// 角色名稱
/// /summary>
public string Code { get; set; }
/// summary>
/// 驗(yàn)證權(quán)限(action執(zhí)行前會(huì)先執(zhí)行這里)
/// /summary>
/// param name="filterContext">/param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//如果存在身份信息
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
ContentResult Content = new ContentResult();
Content.Content = string.Format("script type='text/javascript'>alert('請(qǐng)先登錄!');window.location.href='{0}';/script>", FormsAuthentication.LoginUrl);
filterContext.Result = Content;
}
else
{
string[] Role = CheckLogin.Instance.GetUser().Roles.Split(',');//獲取所有角色
if (!Role.Contains(Code))//驗(yàn)證權(quán)限
{
//驗(yàn)證不通過(guò)
ContentResult Content = new ContentResult();
Content.Content = "script type='text/javascript'>alert('權(quán)限驗(yàn)證不通過(guò)!');history.go(-1);/script>";
filterContext.Result = Content;
}
}
}
}

那么在action中怎么去調(diào)用呢?這里貼出HomeController中的代碼來(lái)看下。
復(fù)制代碼 代碼如下:

public class HomeController : BaseController
{
[AuthAttribute(Code = "admin")]//驗(yàn)證通過(guò)(這個(gè)action只允許admin查看)
public ActionResult Index()
{
Users ModelUser = CheckLogin.Instance.GetUser();
return View(ModelUser);
}
[AuthAttribute(Code = "user")]//驗(yàn)證不通過(guò)
public ActionResult Index2()
{
return View();
}
[AuthAttribute(Code = "admin")]//驗(yàn)證通過(guò),發(fā)生異常
public ActionResult Index3()
{
return View();
}
}

這樣就可以把權(quán)限控制到action了。
3、異常處理
上面HomeController并不是繼承Controller,而是繼承我們自己定義的一個(gè)BaseController,那么我們來(lái)看看BaseController中有寫什么東西?
復(fù)制代碼 代碼如下:

[ErrorAttribute]
public class BaseController : Controller
{
//所有Controller都繼承BaseController,則都會(huì)進(jìn)行異常捕獲
}

在這里BaseController只做了一件事情,就是增加了一個(gè)ErrorAttribute的錯(cuò)誤攔截器,那么只要是在Controller中發(fā)生的異常都會(huì)在ErrorAttribute中進(jìn)行處理,你可以記錄到數(shù)據(jù)庫(kù)等操作。那么我們看看ErrorAttribute是怎么工作的。
復(fù)制代碼 代碼如下:

/// summary>
/// 錯(cuò)誤日志(Controller發(fā)生異常時(shí)會(huì)執(zhí)行這里)
/// /summary>
public class ErrorAttribute : ActionFilterAttribute, IExceptionFilter
{
/// summary>
/// 異常
/// /summary>
/// param name="filterContext">/param>
public void OnException(ExceptionContext filterContext)
{
//獲取異常信息,入庫(kù)保存
Exception Error = filterContext.Exception;
string Message = Error.Message;//錯(cuò)誤信息
string Url = HttpContext.Current.Request.RawUrl;//錯(cuò)誤發(fā)生地址
filterContext.ExceptionHandled = true;
filterContext.Result = new RedirectResult("/Error/Show/");//跳轉(zhuǎn)至錯(cuò)誤提示頁(yè)面
}
}

在這里可以把異常捕獲,然后跳轉(zhuǎn)到友好的錯(cuò)誤提示頁(yè)面。在MVC中幾個(gè)操作就可以這樣簡(jiǎn)單的完成了,關(guān)于代碼在文章下面會(huì)提供下載。

實(shí)例代碼

作者:LyIng.Net
您可能感興趣的文章:
  • Asp.net Core 3.1基于AspectCore實(shí)現(xiàn)AOP實(shí)現(xiàn)事務(wù)、緩存攔截器功能
  • asp.net mvc core管道及攔截器的理解
  • ASP.NET Core 3.0 gRPC攔截器的使用
  • ASP.NET 通過(guò)攔截器記錄錯(cuò)誤日志的示例代碼

標(biāo)簽:綏化 洛陽(yáng) 運(yùn)城 呼倫貝爾 潛江 克拉瑪依 阿里 西藏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Asp.net Mvc 身份驗(yàn)證、異常處理、權(quán)限驗(yàn)證(攔截器)實(shí)現(xiàn)代碼》,本文關(guān)鍵詞  Asp.net,Mvc,身份,驗(yàn)證,異常,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Asp.net Mvc 身份驗(yàn)證、異常處理、權(quán)限驗(yàn)證(攔截器)實(shí)現(xiàn)代碼》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Asp.net Mvc 身份驗(yàn)證、異常處理、權(quán)限驗(yàn)證(攔截器)實(shí)現(xiàn)代碼的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 日本疯狂爆乳XXXX与男人| 吻胸揉屁股揉下面视频| 龙口市| 日韩一区国产二区欧美三| 山村白嫩用力呻吟| ?嫩草影院在线观看?成人版| 肉丝超薄少妇一区二区三区| 美女黄色大片| 天仙tv福利微拍在线网站| 伦理朋友的继| 国产一级特黄AAA大片| 爱草人| 胸大喂奶H玩弄爽n双性| 24meinv爱死美女| 99在线观看视频免费精品9| 欢乐颂5在线观看完整免费版| 91人人澡人人爽人人模下| 天天鲁天天爱天天做| 小俊┅┅快┅┅用力啊男视频| 最近更新中文字幕第一免费版| 国产人妖TS重口系列网站观看| japaneseLESBIANXXXX124| 国产中出视频| 美女18毛片免费视频| 色拍拍噜噜噜噜久久久久久国产| 久久久久久精品国产三级 | 国产aaaaa一级毛片无下载| 潘金莲一级婬片AAAAAA播放| 国产美女裸体秘?无遮挡JK視頻| 绍兴县| 国产精品视频ccav| 国产午夜精品AV一区二区麻豆| 女仆放荡勾人h嗯啊| 国产高清???精品王| 色樱桃影院亚洲精品影院| 插鸡网站| 九色91popny蝌蚪| 日产无码久久久久久精品桃花岛| 亚洲BT 欧美BT 日本BT| 爆乳XXX色情高潮HD| 120部香港三级未删电影女欢|