1、用户登录 验证用户是否登录成功步骤直接忽略,用户登录成功后怎么保存当前用户登录信息(session,cookie),本文介绍的是身份验证(其实就是基于cookie)的,下面看看代码。
引入命名空间
using System.Web.Security;
复制代码 代码如下:
Users ModelUser = new Users() { ID = 10000, Name = UserName, UserName = UserName, PassWord = PassWord, Roles = "admin" };//用户实体
string UserData = SerializeHelper.Instance.JsonSerialize<Users>(ModelUser);//序列化用户实体
//保存身份信息,参数说明可以看提示
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);
现在身份信息就保存到cookie中了,如果有场景需要用到当前用户的用户ID或者别的信息的时候该怎么办呢?
那么,我们重新在cookie中获取身份信息,然后解密,再反序列化成用户实体就OK了。
复制代码 代码如下:
/// <summary>
/// 获取用户登录信息
/// </summary>
/// <returns></returns>
public Users GetUser()
{
if (HttpContext.Current.Request.IsAuthenticated)//是否通过身份验证
{
HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];//获取cookie
FormsAuthenticationTicket Ticket = FormsAuthentication.Decrypt(authCookie.Value);//解密
return SerializeHelper.Instance.JsonDeserialize<Users>(Ticket.UserData);//反序列化
}
return null;
}
2、权限验证 这里用到的是MVC中的action拦截器(重写OnActionExecuting),在action执行之前会先运行拦截器中的代码。这里同时可以身份验证是否过期。
复制代码 代码如下:
/// <summary>
/// 权限验证
/// </summary>
public class AuthAttribute : ActionFilterAttribute
{
/// <summary>
/// 角色名称
/// </summary>
public string Code { get; set; }
/// <summary>
/// 验证权限(action执行前会先执行这里)
/// </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('请先登录!');window.location.href='{0}';</script>", FormsAuthentication.LoginUrl);
filterContext.Result = Content;
}
else
{
string[] Role = CheckLogin.Instance.GetUser().Roles.Split(',');//获取所有角色
if (!Role.Contains(Code))//验证权限
{
//验证不通过
ContentResult Content = new ContentResult();
Content.Content = "<script type='text/javascript'>alert('权限验证不通过!');history.go(-1);</script>";
filterContext.Result = Content;
}
}
}
}
那么在action中怎么去调用呢?这里贴出HomeController中的代码来看下。
复制代码 代码如下:
public class HomeController : BaseController
{
[AuthAttribute(Code = "admin")]//验证通过(这个action只允许admin查看)
public ActionResult Index()
{
Users ModelUser = CheckLogin.Instance.GetUser();
return View(ModelUser);
}
[AuthAttribute(Code = "user")]//验证不通过
public ActionResult Index2()
{
return View();
}
[AuthAttribute(Code = "admin")]//验证通过,发生异常
public ActionResult Index3()
{
return View();
}
}
这样就可以把权限控制到action了。
3、异常处理
上面HomeController并不是继承Controller,而是继承我们自己定义的一个BaseController,那么我们来看看BaseController中有写什么东西?
复制代码 代码如下:
[ErrorAttribute]
public class BaseController : Controller
{
//所有Controller都继承BaseController,则都会进行异常捕获
}
在这里BaseController只做了一件事情,就是增加了一个ErrorAttribute的错误拦截器,那么只要是在Controller中发生的异常都会在ErrorAttribute中进行处理,你可以记录到数据库等操作。那么我们看看ErrorAttribute是怎么工作的。
复制代码 代码如下:
/// <summary>
/// 错误日志(Controller发生异常时会执行这里)
/// </summary>
public class ErrorAttribute : ActionFilterAttribute, IExceptionFilter
{
/// <summary>
/// 异常
/// </summary>
/// <param name="filterContext"></param>
public void OnException(ExceptionContext filterContext)
{
//获取异常信息,入库保存
Exception Error = filterContext.Exception;
string Message = Error.Message;//错误信息
string Url = HttpContext.Current.Request.RawUrl;//错误发生地址
filterContext.ExceptionHandled = true;
filterContext.Result = new RedirectResult("/Error/Show/");//跳转至错误提示页面
}
}
在这里可以把异常捕获,然后跳转到友好的错误提示页面。在MVC中几个操作就可以这样简单的完成了,关于代码在文章下面会提供下载。
实例代码
作者:LyIng.Net
相关推荐:
SEO在线服务-让您的网站快速跃升至搜索引擎前列,江西小红书营销推广案例
SEO在广告领域的深度解析:如何利用SEO提升广告效果,网文写作ai工具
打造内容创作新高度:文章扩写AI的革命性优势
AI工具,让工作效率翻倍:AI工具教程全面解析
seo网赚什么意思,网站seo赚钱 ,ai打不开ai
ChatGPT与讯飞:AI语音与智能对话的完美融合,ai直角变圆角
ChatGPT:OpenAI的创新之作-一款颠覆传统的语言模型,ai球衣号
优化整站,让网站飞速增长,打造行业竞争力,广东网站建设与维护
用AI征文工具,轻松创作出精彩文章!
ChatGPTO1Pro模型:开启AI新纪元,免费应用带来无尽可能,苹果上的ai写作在哪里
GPT人工智能-让未来触手可及的智慧之光,ai头花写真
AI公众号文章生成,轻松打造爆款内容
AI自动帮写,轻松应对内容创作挑战,赋能写作新未来,嘿科技ai
为什么做抖音seo,为什么做抖音推广 ,描边ai虚线
SEO优化顾问:让您的网站脱颖而出的秘密武器,ai ps 群
SEO重要性与企业互联网发展的必由之路,互联网营销推广平台设计
ChatGPT4账号共享-让AI助力你的学习与工作,轻松提升效率,ai巨无霸
GoogleGPT-引领未来智能对话的革命,灵境ai画质
AI自动读文:让阅读更轻松、更高效的智能革命,寄ai空
怎么让AI写文章,轻松实现内容创作的智能化
如何快速写出高质量的AI文章:从入门到精通
ChatGPT目前,我无法查看或打开附件,但我依然能为你提供全面的帮助,苹果ai谷歌ai
ChatGPT不能用了?了解这一背后的真相及解决方法,ai恐怖头像
优排软件:高效管理新天地,轻松提升工作效率,长葛外贸网站建设
高效创作新时代AI文案速写工具,让创作更轻松
优化软件:让电脑性能焕然一新,提升效率的秘密武器,大理网站推广招聘信息最新
SEO爱站:提升网站排名,赢得流量的秘密武器,优化网站设计价格多少
为什么要监控SEO效果,国家为什么要监控个人 ,抚顺ai系统
怎么用AI生成文章?全新写作方式的揭秘与应用指南
Chat免费,让沟通无界限,尽享智能对话时代,ai没办法置顶
SEO永远,数字营销的核心力量,广州seo搜索栏内容
SEO利用:让你的网站快速登顶,获取更多流量与客户!,延边小程序推广平台网站
SEO定价策略:如何根据企业需求定制最佳价格方案,教育培训抖音营销推广
SEO特点与实施策略:提升网站流量与排名的关键,定西抖音seo价格查询
SEO怎么排名?这5大技巧,轻松提升网站排名,人人都可ai
SEO职位:数字营销的核心,开启职业新高峰,汕尾网站建设推广厂商
AI文章比对技术:引领写作与内容审核的新革命,ai智能写作小说免费
ChatGPT的VPN梯子:畅享全球互联网自由,打破地域限制,一直搜Ai
人工润色:让文字更具魅力的秘密武器,快排seo软件哪个最好
优化,让生活与工作更高效-从个人到企业的全面升级,广州百度seo费用
软件AI的全称:人工智能驱动未来的关键力量
SEO有话:如何用精准优化助力企业在线增长,食品微信营销推广
ChatGPT为什么访问不了了?了解背后的原因与解决方法,AI怎么拖入路径
企业营销:如何在竞争激烈的市场中脱颖而出,美装网站Seo优化
未来科技:AI工具为生活赋能,打造智能未来
seo适合什么人做,哪种seo做得好 ,晋城ai论文写作免费
打破创作边界,无限可能无限制生成文章的AI
SEO大量优化:如何通过精准策略提升网站流量,突破搜索引擎排名瓶颈,吕梁本地网站推广平台
优化型网站:提升企业竞争力的必备利器,重庆网站推广工作如何
seo要会些什么,seo需要学些什么内容 ,轻盈ai