前言:

  MVC现在已经成为web开发的一个主流趋势了,还没用过的小伙伴,你们已经落伍了,这里我推荐一篇学习博客 玩转Asp.net MVC 的八个扩展点  代码完全开源,下载地址:https://git.oschina.net/tibos/LSJ_NHibernate

Global 全局应用程序处理的入口,在这个里面可以干很多事,比如把一些公共的东西绑定进去,这里不知不觉就用到一个知识,面向切面编程AOP

最常用的,我们把验证用户身份,记录用户操作信息....这些记为横切关注点,我们进行每个操作的时候都要验证用户凭证是否失效,干了些什么事,如果每个请求都写,代码就冗余了,也不便于后期的维护,我们提取成横切关注点后,只用写一遍代码就能轻松实现了.

为此,MVC给我们提供了很好的拓展,我们重新ActionFilterAttribute里面的方法即可

我们重写这4个方法即可

         // OnActionExecuted 在执行操作方法后由 ASP.NET MVC 框架调用。
// OnActionExecuting 在执行操作方法之前由 ASP.NET MVC 框架调用。
// OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。
// OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。

用Log4net记录这些请求

顺便也可以记录到数据库,做操作日志

保存用户凭证我用的是forms表单验证,MVC默认是支持的,设置起来也非常简单

     <authentication mode="Forms">
<forms loginUrl="~/Home/Login" timeout="" />
</authentication>
<authorization>
<deny users="?" />
</authorization>

设置成没有登入的用户不能访问,在Global将事件注册到mvc

 public MvcApplication()
{
AuthorizeRequest += new EventHandler(MvcApplication_AuthorizeRequest);
} void MvcApplication_AuthorizeRequest(object sender, EventArgs e)
{
IIdentity id = Context.User.Identity;
if (id.IsAuthenticated)
{ var roles = new DAO.BLL.B_Manager().GetRoles(id.Name);
Context.User = new GenericPrincipal(id, roles);
}
}

这样进行所有的操作,forms都会验证用户是否登录,再结合OnActionExecuting进行权限验证,没有权限的就直接返回一个空视图即可!

用forms保存凭证的要注意一点,对于没有登录的用户,项目下的所有资源都无法访问,如js,img....所以这里必须将不需要验证的文件开放访问权限,在配置文件里设置,如下

  <!--这些资源是不用权限判断的-->
<location path="img">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>

最后一个需要捕获的就是错误日志,重写HandleErrorAttribute方法即可

     /// <summary>
/// 捕获程序出错日志
/// </summary>
public class Log4NetExceptionFilter : HandleErrorAttribute
{ public override void OnException(ExceptionContext filterContext)
{
string message = string.Format("消息类型:{0}<br>消息内容:{1}<br>引发异常的方法:{2}<br>引发异常源:{3}"
, filterContext.Exception.GetType().Name
, filterContext.Exception.Message
, filterContext.Exception.TargetSite
, filterContext.Exception.Source + filterContext.Exception.StackTrace
); //记录日志
CZLogger.Logger.Error(message); //抛出异常信息
filterContext.Controller.TempData["ExceptionAttributeMessages"] = message; //转向
filterContext.ExceptionHandled = true;
filterContext.Result = new RedirectResult("/Home/Error/");
}
}

将记录错误日志方法写入RegisterGlobalFilters即可.

最新文章

  1. 【C#】新建服务自动发送邮件
  2. axis 理解
  3. HDOJ 1907 John
  4. Spring读书笔记-----Spring的Bean之Bean的基本概念
  5. Android 开发 之 Fragment 详解
  6. css初始化代码方案
  7. Oracle11g R2学习系列 之七安全性
  8. hdu4489(递推dp)
  9. My sql添加远程用户root密码为password
  10. 关于第一次STM32连接电脑下载程序
  11. vue-cli脚手架npm相关文件解读(1)webpack.base.conf.js
  12. 【一天一道LeetCode】#120. Triangle
  13. python之OpenCv(五)---抓取摄像头视频图像
  14. 微信OAuth2.0网页授权设置一个域名需多个域名使用的问题
  15. spark基础----&gt;spark的第一个程序
  16. servlet3.0
  17. (KMP 字符串处理)Substrings -- hdu -- 1238
  18. [翻译] PJR Signature View
  19. Vuejs+axios+SpringMVC 1
  20. mysql数据库查找类型不匹配

热门文章

  1. C#.NET 打印连续纸高度动态变化(基于长江支流的金质打印通)
  2. bzoj2763: [JLOI2011]飞行路线 分层图+dij+heap
  3. 2DPlatformer-SLua 编辑器 UI 美化
  4. Fatjar成功安装记录
  5. Java笔记(二十八)&hellip;&hellip;IO流下 IO包中其他常用类以及编码表问题
  6. WordPress更新服务加快收录
  7. HW3.10
  8. 小波变换和motion信号处理(一)(转)
  9. opencv基础知识-videowriter
  10. iOS开发中使用静态库 .a 文件