复制代码 代码如下:
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);
复制代码 代码如下:
/// <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;
}
复制代码 代码如下:
/// <summary>
/// 权限验证
/// </summary>
public class AuthAttribute : ActionFilterAttribute
{
/// <summary>
/// 角色名称
/// </summary>
public string Code { get; set; }
/// <summary>
/// 验证权限(action执行前会先执行这里)
/// </summary>
/// <param></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;
}
}
}
}
复制代码 代码如下:
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();
}
}
复制代码 代码如下:
[ErrorAttribute]
public class BaseController : Controller
{
//所有Controller都继承BaseController,则都会进行异常捕获
}
复制代码 代码如下:
/// <summary>
/// 错误日志(Controller发生异常时会执行这里)
/// </summary>
public class ErrorAttribute : ActionFilterAttribute, IExceptionFilter
{
/// <summary>
/// 异常
/// </summary>
/// <param></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/");//跳转至错误提示页面
}
}
新闻热点
疑难解答
图片精选