前言:

  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即可.

LSJ_NHibernate第四章 MVC的更多相关文章

  1. ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由

    原文:Routing to Controller Actions 作者:Ryan Nowak.Rick Anderson 翻译:娄宇(Lyrics) 校对:何镇汐.姚阿勇(Dr.Yao) ASP.NE ...

  2. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入

    原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...

  3. ASP.NET Core 中文文档 第四章 MVC(4.6)Areas(区域)

    原文:Areas 作者:Dhananjay Kumar 和 Rick Anderson 翻译:耿晓亮(Blue) 校对:许登洋(Seay) Areas 是 ASP.NET MVC 用来将相关功能组织成 ...

  4. ASP.NET Core 中文文档 第四章 MVC(4.5)测试控制器逻辑

    原文: Testing Controller Logic 作者: Steve Smith 翻译: 姚阿勇(Dr.Yao) 校对: 高嵩(Jack) ASP.NET MVC 应用程序的控制器应当小巧并专 ...

  5. ASP.NET Core 中文文档 第四章 MVC(4.4)依赖注入和控制器

    原文: Dependency Injection and Controllers 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core MVC 控制器应通过 ...

  6. ASP.NET Core 中文文档 第四章 MVC(4.3)过滤器

    原文:Filters 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:何镇汐 ASP.NET MVC 过滤器 可在执行管道的前后特定阶段执行代码.过滤器可以配置为全局有效.仅对控 ...

  7. ASP.NET Core 中文文档 第四章 MVC(4.1)Controllers, Actions 和 Action Results

    原文:Controllers, Actions, and Action Results 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:许登洋(Seay) Action 和 acti ...

  8. ASP.NET Core 中文文档 第四章 MVC(3.9)视图组件

    作者: Rick Anderson 翻译: 娄宇(Lyrics) 校对: 高嵩 章节: 介绍视图组件 创建视图组件 调用视图组件 演练:创建一个简单的视图组件 附加的资源 查看或下载示例代码 介绍视图 ...

  9. ASP.NET Core 中文文档 第四章 MVC(3.7 )局部视图(partial)

    原文:Partial Views 作者:Steve Smith 翻译:张海龙(jiechen).刘怡(AlexLEWIS) 校对:许登洋(Seay).何镇汐.魏美娟(初见) ASP.NET Core ...

随机推荐

  1. MVC 自定义AuthorizeAttribute实现权限管理

    在上一节中提到可以使用AuthorizeAttribute进行权限管理: [Authorize] public ActionResult TestAuthorize() { return View() ...

  2. 两个结构体ifconf和ifreq

    用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人来说都是比较陌生的,这里给大家一种比较简单的理解方法,当然只一种帮助理解的方法,在描述中可能会有一些地方与真实定 ...

  3. 在Python中的格式化

    str= '@SES/%i/'%-1print strstr1='@SES/%i/'%1print str1str2='@SES/%i/'%2print str2 打印出的结果: @SES/-1/@S ...

  4. 【CSS】Intermediate7:Pseudo Elements

    1.selector:pseudo element{property:value;} 2.first-letter  first-line CSS3:: 与pseudo class 区别 old br ...

  5. Storm系列(十五)架构分析之Executor-Spout

    Spout实现mk-threads接口用于创建与Executor对应的消息循环主函数. defmulti mk-threads executor-selector Mk-threads函数的主消息循环 ...

  6. 判断html中的滚动条

    在工作中需要调整jqgrid的列宽,但是不希望有横向滚动条,因为是固定的列宽,当显示区域缩小后,数据会出现竖型滚动条 这个时候需要判断竖型滚动条是否存在进行列宽的调整. 自己调查了一下,发现滚动条可以 ...

  7. Win7 64位 安装E10后 打不开的解决方案 -摘自网络

    但是后来发现点击IE图标没有任何反应,因此从网络上寻求帮助!将经验分享大家!进入注册表(运行regedit),找到 HKEY_CURRENT_USER\Software\Microsoft\Inter ...

  8. Spring源码入门——AnnotationBeanNameGenerator解析

    ---恢复内容开始--- 接上篇,上篇解析了DefaultBeanGenerator生成bean name的过程(http://www.cnblogs.com/jason0529/p/5272265. ...

  9. 重要常用的Lunix命令

    lunix 命令大全:  http://man.linuxde.net/ 复制文件/文件夹 复制到本地 文件夹:scp -r work@www.abc.com:/home/work/project / ...

  10. AtomicLong

    Spring package com.uniubi.management.controller; import java.util.concurrent.atomic.AtomicLong; impo ...