自制MVC框架基础插件介绍
本文介绍的基础插件不是实现BeforehandCommonAttribute或ProceedPlugin的postsharp插件,这些都是自定义的基础性的拦截,而且在项目中经常用到。
1). CompiledAttribute
设置在方法名上,用来说明程序在处理完MVC模式后再去驱动WebForm工作,两者工作模式结合进来。
控制器代码:
namespace Jobmate.Controllers
{
    public class Default
    {
        [Compiled]
        public virtual IDictionary Compiled1(IDictionary context)
        {
            context.Add("x", "b");
            return context;
        }
    }
}
Compiled1.aspx页面代码:
页面端:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Compiled1.aspx.cs" Inherits="integration_class_Compiled1" %> <%="aaa"%>
页面后端调用:
public partial class integration_class_Compiled1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //控制端会传过来一个hashtable,在页面端如果要使用,通过以下手端可使用
        IDictionary context = (IDictionary)HttpContext.Current.Items["context"];
        Response.Write(context["x"]);
    }
}
2). DynamicAttribute
设置在类名上,表示该类是需要被动态拦截的,就是通过aspectsharp拦截。
控制器代码:
namespace Jobmate.Controllers
{
    [Dynamic]
    public class Default
{
             /// <summary>
        /// 写特性方式实现
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        [IP(AspectPriority = )]
        public virtual IDictionary Dynamic1(IDictionary context)   //必须是虚方法,否则没法拦截
        {
            context.Add("x", "b");
            return context;
        }
    }
}
Web.config配置:
<configuration>
…
         <!--AOP切面,实例化对像时需使用Stephen.Core.Proxy代理声明得到新实例,动态代理,advice放后面的先执行-->
         <aspectsharp>
                   <configuration>
                            aspect processor1 for [Jobmate.Controllers]
                                     pointcut method(* Dynamic1(*))
                                               advice(ShareInterceptor)
                                     end
                            end
                   </configuration>
         </aspectsharp>
…
</configuration>
拦截器ShareInterceptor代码:
namespace Jobmate.Controllers.Interceptor
{
    [Serializable]
    public class ShareInterceptor : AspectInterceptor
    {
        public override void Proceed(IDictionary myContext)
        {
            myContext.Add("aaa", "xxx");
        }
    }
}
Dynamic1.aspx只输入了$aaa
运行以后页面输出是:xxx
3). HasSessionAttribute
设置在方法名上,表示该方法具有会话功能,默认方法是没有会话功能的。
控制器代码:
namespace Jobmate.Controllers
{
    [Dynamic]
    public class Default
    {
        /// <summary>
        /// 通过ValidateKey验证码的方式
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        [Insert(AspectPriority = 2, Key = "Jobmate.Users", StatementID = "UserOpt", ValidateKey = "ValidateNO")]
        [LongID(AspectPriority = 1)]
        [FormData(AspectPriority = 0)]
        [HasSession]
        public virtual object Create3Action(IDictionary context)
        {
            long s = Convert.ToInt64(context[InsertAttribute.ValueKey]);
            string st;
            if (s > 0)
                st = "操作成功!";
            else
                if (s == -404)
                    st = "验证码不正确!";
                else
                    st = "操作失败!";
            HttpContext.Current.Response.Write("<script>alert('" + st + "');document.location.href='HashSession1.aspx'</script>");
            HttpContext.Current.Response.End();
            return s;
        }
}
}
4). OutputCacheAttribute
设置在方法名上,缓存页面拼接的字串,下次打开页面直接拿缓存字串,而不用处理相关操作了。
| 属性名 | 作用 | 默认值 | 选项说明 | 其它说明 | 
| Duration | 过期时间(秒) | 30 | 可选 | |
| VaryByParam | 缓存参数,用分逗号隔开,页面只要参数没有变化,就输出缓存中的内容(区分大小写)。 | 空值 | 可选 | 
控制器代码:
namespace Jobmate.Controllers
{
    [Dynamic]
    public class Default
    {
        /// <summary>
        /// 缓存100秒,这时你再更新数据库数据的话他也不会变了
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        [OutputCache(Duration = 100)]
        [Get(Key = "Jobmate.Users.UserOpt")]
        public virtual IDictionary OutputCache1(IDictionary context)
        {
            return context;
        }
}
}
5).直接通过WebForm页面
新建的webform只要不在控制层对应相应的方法就会执行webform原来的调用。
以上方式可以demo中体验。
demo下载:
http://files.cnblogs.com/netcorner/%E5%9F%BA%E7%A1%80%E6%8F%92%E4%BB%B6%E6%BC%94%E7%A4%BA.rar
自制MVC框架基础插件介绍的更多相关文章
- 自制MVC框架的插件与拦截器基础
		上篇谈到我自己写的MVC框架,接下来讲讲插件及拦截器! 在处理一些通用的逻辑最好把它封装一个插件或者拦截器,以便日后可以直接拿过来直接使用.在我的框架中可以通过继承以下抽象类来实现插件或者拦截器. 1 ... 
- MVC框架的插件与拦截器基础
		自制MVC框架的插件与拦截器基础 上篇谈到我自己写的MVC框架,接下来讲讲插件及拦截器! 在处理一些通用的逻辑最好把它封装一个插件或者拦截器,以便日后可以直接拿过来直接使用.在我的框架中可以通过继承以 ... 
- .Net MVC 框架基础知识
		一.什么是MVC? MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式. MVC全名是Model View Controlle ... 
- 自制MVC框架CRUD操作、列表、分页显示插件介绍
		这里涉及到的操作都是引用自Stephen.DALService数据层.数据访问层实现方式在后文中我会仔细的说明,先说明一下数据操作集成的插件. 1).InsertAttribute 用于插入记录. 状 ... 
- ABP VNext框架基础知识介绍(1)--框架基础类继承关系
		在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ... 
- ABP VNext框架基础知识介绍(2)--微服务的网关
		ABP VNext框架如果不考虑在微服务上的应用,也就是开发单体应用解决方案,虽然也是模块化开发,但其集成使用的难度会降低一个层级,不过ABP VNext和ABP框架一样,基础内容都会设计很多内容,如 ... 
- 一起写框架-MVC框架-基础功能-Date类型数据绑定(七)
		实现功能 表单请求传递的数据,格式为以下格式的日期时间数据. (1):yyyy-MM-dd hh:mm:ss (2):yyyy-MM-dd 执行方法可以使用Date类型接收. 实现思路 1.获得表单字 ... 
- Spring MVC 实验3 springMVC框架基础
		实验三:spring mvc框架基础 实验目的: (1)理解spring mvc框架的运行流程 . (2)掌握springmvc框架的配置 实验要求: 请根据课程内容, 修改项目中的任意一用例,将控 ... 
- Portlet MVC框架
		Portlet MVC框架 16.1. 介绍 Spring不仅支持传统(基于Servlet)的Web开发,也支持JSR-168 Portlet开发. Portlet MVC框架尽可能多地采用Web ... 
随机推荐
- springmvc之文件上传、下载
			1.接收到的是图片的流时 //上传头像 @RequestMapping(value = "/uploadHeadSculpture", method = RequestMethod ... 
- [NOIp2017提高组]小凯的疑惑
			题目大意: 给你两个数a,b,保证a与b互质,求最大的x满足不能被表示成若干个a与b的和. 思路: 据说是小学奥数题. 考场上先写了个a*b的60分DP,然后打表发现答案就是(a-1)*(b-1)-1 ... 
- [NOIP2011]聪明的质检员
			[问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有$n$个矿石,从 1 到$n$逐一编号,每个矿石都有自己的重量$w_i$以及价值$v_i$.检验矿产的流程是: 1. 给 ... 
- openstack-cinder-netapp
			https://communities.netapp.com/docs/DOC-31749 http://docs.openstack.org/havana/config-reference/cont ... 
- 阿里云ECS使用SSH连接CentOS 6.9经常断线的问题解决:OperationTimedOut
			说明:不一定有效,可以试一下. 设置: vi /etc/ssh/sshd_config #添加或修改以下配置 ClientAliveInterval #每隔多少秒给SSH客户端发送一次信号 Clien ... 
- php-scandir()报错
			l linux下 vim /usr/local/php/etc/php.in l 直接斜杠找 /disable_functions 回车 l 按i键 l ... 
- Unity3d-Socket之龙一编年史network.dll分析(1)
			今天闲着无聊,看到群里的老大共享了反编译的工具,就下载下来玩下. 说道反编译我个人不太推崇反编译,感觉不道德,毕竟是人家的代码,但是又回想一下,我们拿代码看是抱着学习的态度又有何不可,所谓既是民族的也 ... 
- LookupError: unknown encoding: cp65001
			在CMD下解释运行python时出现LookupError: unknown encoding: cp65001错误(编码错误) 在cmd下chcp命令(大概是change codepage?)可查看 ... 
- 一个简单好用的zabbix告警信息发送工具
			之前使用邮件和短信发送zabbix告警信息,但告警信息无法实时查看或者无法发送,故障无法及时通知运维人员. 后来使用第三方微信接口发送信息,愉快地用了一年多,突然收费了. zabbix告警一直是我的痛 ... 
- Android Killer
			首先,我们先看一Android界有名的大神写关于Android反编译的博客: 郭 大 侠:http://blog.csdn.net/guolin_blog/article/details/497380 ... 
