本文介绍的基础插件不是实现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框架基础插件介绍的更多相关文章

  1. 自制MVC框架的插件与拦截器基础

    上篇谈到我自己写的MVC框架,接下来讲讲插件及拦截器! 在处理一些通用的逻辑最好把它封装一个插件或者拦截器,以便日后可以直接拿过来直接使用.在我的框架中可以通过继承以下抽象类来实现插件或者拦截器. 1 ...

  2. MVC框架的插件与拦截器基础

    自制MVC框架的插件与拦截器基础 上篇谈到我自己写的MVC框架,接下来讲讲插件及拦截器! 在处理一些通用的逻辑最好把它封装一个插件或者拦截器,以便日后可以直接拿过来直接使用.在我的框架中可以通过继承以 ...

  3. .Net MVC 框架基础知识

    一.什么是MVC? MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式. MVC全名是Model View Controlle ...

  4. 自制MVC框架CRUD操作、列表、分页显示插件介绍

    这里涉及到的操作都是引用自Stephen.DALService数据层.数据访问层实现方式在后文中我会仔细的说明,先说明一下数据操作集成的插件. 1).InsertAttribute 用于插入记录. 状 ...

  5. ABP VNext框架基础知识介绍(1)--框架基础类继承关系

    在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...

  6. ABP VNext框架基础知识介绍(2)--微服务的网关

    ABP VNext框架如果不考虑在微服务上的应用,也就是开发单体应用解决方案,虽然也是模块化开发,但其集成使用的难度会降低一个层级,不过ABP VNext和ABP框架一样,基础内容都会设计很多内容,如 ...

  7. 一起写框架-MVC框架-基础功能-Date类型数据绑定(七)

    实现功能 表单请求传递的数据,格式为以下格式的日期时间数据. (1):yyyy-MM-dd hh:mm:ss (2):yyyy-MM-dd 执行方法可以使用Date类型接收. 实现思路 1.获得表单字 ...

  8. Spring MVC 实验3 springMVC框架基础

    实验三:spring mvc框架基础 实验目的: (1)理解spring mvc框架的运行流程 . (2)掌握springmvc框架的配置 实验要求: 请根据课程内容,  修改项目中的任意一用例,将控 ...

  9. Portlet MVC框架

    Portlet MVC框架 16.1. 介绍   Spring不仅支持传统(基于Servlet)的Web开发,也支持JSR-168 Portlet开发. Portlet MVC框架尽可能多地采用Web ...

随机推荐

  1. 【rope】bzoj1269 [AHOI2006]文本编辑器editor

    维护一个字符串,支持以下操作:   主要就是 成段插入.成段删除.成段翻转.前两个操作很好通过rope实现.第三个操作也不难,维护两个rope,一个正向,一个反向,翻转时swap一下就行了.   ro ...

  2. 小H的硬币游戏

    题目大意: 有n个物品排成一排,每个物品都有自己的价值,你每次可以从中挑选两个距离为k的物品取走,问最大的收益. (如果原来两个物品中间有物品被取走,距离不变) 思路: 贪心. 先按照每个物品的位置m ...

  3. IOS集成到支付宝的步骤及问题

    一,在支付宝开放平台下载支付宝SDK(https://openhome.alipay.com/platform/document.htm#down) 二,添加sdk文件到xcode 1,新建一个ali ...

  4. 工作中常用Lixu命令学习笔记

    对于Linux,我是菜鸟,也是在工作中了才开始慢慢接触,用Linux的人都我都会觉得屌屌的,现在把工作中常用的一些Linux命令记录一下,供以后学习和参考. cd 这可能是我觉得Linux最简单的一个 ...

  5. 关于如何避免Android中Bitmap引起的OutOfMemoryError

    在Android中处理大图片不是一件很随意的事情,因为通常我们使用的是内置的BitmapFactory解码图片的,而BitmapFactory往往会因为图片过大而遇到OutOfMemoryError的 ...

  6. python读取大文件的方法及mmap内存映射模块

    python计算文件的行数和读取某一行内容的实现方法 :最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的 ...

  7. 一.RocketMQ消息中间件 windwos使用

    ⦁    能够保证严格的消息顺序⦁    提供丰富的消息拉取模式⦁    高效的订阅者水平扩展能力⦁    实时的消息订阅机制⦁    亿级的消息堆积能力⦁    下载https://github.c ...

  8. (转)HBase 常用Shell命令

    转自:http://my.oschina.net/u/189445/blog/595232 hbase shell命令                             描述  alter 修改 ...

  9. [OpenCV]实验1.1:图像加载、显示

    实验要求:利用图像库的功能,实现从文件加载图像,并在窗口中进行显示的功能:利用常见的图像文件格式(.jpg;.png;.bmp; .gif)进行测试 实验原理:图片读取到程序中是以Mat结构存储的,在 ...

  10. (转) java中try/catch性能和原理

    stackoverflow上有一个讨论,参与的人还挺多: https://stackoverflow.com/questions/141560/should-try-catch-Go-inside-o ...