Attribute(特性)
一向都觉得.NET的Attribute好神秘。一个方框框住的东西,置身于类、方法的头部,本身不在类或方法里面,但又会起作用,有时作用还很大,仿佛充满了魔力。简直给人一种无冕之王,幕后之黑手的感觉!
某十几年前已经开始接触C#,却对这个Attribute充满了迷茫。原因固然跟本人懒惰成性,不思进取,从业十几年,不是“有十几年工作经验,而是一条经验用了十几年”有关,也因为我当初自学的C#教材,什么宝典,什么从入门到精通之类,都没有介绍这个东东。就算查,也不知道它叫啥。你看看:
后来有人叫它:特性。总算知道了。
其实Attribute本身就是一个类。换言之,它就是代码。虽然没有放在类、方法里面,只放在头部,好像就是个说明而已,但其实,它们本身就是代码的一部分。编译器、CLR能够识别、并处理它们,做出不同的反应,所以说到底,这有啥好神秘的?我只是脑筋转不过弯来罢了。
就是在我们自己的代码里面,也可以直接使用的:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
bool hasPermission = true;
var permissionAttributes = filterContext
.ActionDescriptor
.GetCustomAttributes(typeof(PermissionAttribute), false)
.Cast<PermissionAttribute>();
if (permissionAttributes == null || permissionAttributes.Count() == 0)
{//如果action没有指定权限,则继承controller的指定
permissionAttributes = filterContext
.ActionDescriptor
.ControllerDescriptor
.GetCustomAttributes(typeof(PermissionAttribute), false)
.Cast<PermissionAttribute>();
}
}
所谓的PermissionAttribute,是自己写的一个跟权限有关的特性
public class PermissionAttribute : FilterAttribute, IActionFilter
{
public List<int> Permissions { get; set; }
public PermissionAttribute(params int[] parameters)
{
Permissions = parameters.ToList();
}
}
可以用在action或controller上
[Permission((int)EnumBusinessPermission.DictionaryAdmin)]
public ActionResult Create()
{
SysField model = new SysField();
return View("Edit", model);
}
Attribute(特性)的更多相关文章
- .net学习之Attribute特性和EF关键知识点
一.Attribute特性/标签1.Attribute用来对类.属性.方法等标注额外的信息,贴一个标签简单的说,定制特性Attribute,本质上就是一个类,它为目标元素提供关联附加信息,并在运行时以 ...
- [C#]Attribute特性(3)——AttributeUsage特性和特性标识符
相关文章 [C#]Attribute特性 [C#]Attribute特性(2)——方法的特性及特性参数 AttributeUsage特性 除了可以定制自己的特性来注释常用的C#类型外,您可以用At ...
- [C#]Attribute特性(2)——方法的特性及特性参数
上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...
- 关于C# 中的Attribute 特性
关于C# 中的Attribute 特性 作者: 钢钢 来源: 博客园 发布时间: 2011-01-09 23:30 阅读: 13921 次 推荐: 12 原文链接 [收藏] 摘要:纠结地说 ...
- Attribute特性验证模型model
数据验证我们往往分为前台验证和后台验证,而我们的后台验证每到一个方法中就要去验证一次,这样的代码想想都难以维护,这篇我们这篇文章就是为了解决这样的问题.用attribute 这个特性来解决这样的问题 ...
- 如何在方法上贴上attribute(特性)捕捉方法的异常,来实现我们的需求
在方法上贴上attribute(特性)捕捉方法的异常,其实这么做也是为了在项目中不会大量使用try-cacth这样的语句,同时使我们的代码看起来更简洁,更直观,将逻辑业务分离使得后期维护方便.这里我们 ...
- .NET进阶篇03-Reflection反射、Attribute特性
知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂 内容目录 一.概述二.反射1.反射使用2.创建对象3.调用方法4.字段属性三.特性四.总结 一.概述 反射其实无处不在,我们用VS进行调试时候, ...
- Net中Attribute特性的高级使用及自定义验证实现
好久没写博客了,今天在百忙之中抽空来写篇文章,记录一下最近深入学习Attribute特性的笔记及心得.~~ 一.什么是特性? 特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法. ...
- C#基础系列——Attribute特性使用
前言:上篇 C#基础系列——反射笔记 总结了下反射得基础用法,这章我们来看看C#的另一个基础技术——特性. 1.什么是特性:就博主的理解,特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属 ...
- [C#]Attribute特性
简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联. 特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性. 特性具有以下属性: 特性可向程序中 ...
随机推荐
- POJ 3259 Wormholes(负权环路)
题意: 农夫约翰农场里发现了很多虫洞,他是个超级冒险迷,想利用虫洞回到过去,看再回来的时候能不能看到没有离开之前的自己,农场里有N块地,M条路连接着两块地,W个虫洞,连接两块地的路是双向的,而虫洞是单 ...
- Spring MVC中使用Swagger生成API文档和完整项目示例Demo,swagger-server-api
本文作者:小雷FansUnion-一个有创业和投资经验的资深程序员-全球最大中文IT社区CSDN知名博主-排名第119 实际项目中非常需要写文档,提高Java服务端和Web前端以及移动端的对接效率 ...
- 03002_Http请求协议分析
1.编写一个form.html的表单页面 (1)使用EclipseEE新建一个动态的web项目: (2)Dynamic web module version选择2,5版本: (3)新建一个form.h ...
- jmespath库解析json
在测试过程中,经常会去JSON中的某个值,jmespath可以是除了jsonpath的另外一种选择. 下面通过几个例子来说明jmespath在python的使用 jmespath python安装 非 ...
- xtu read problem training A - Dividing
A - Dividing Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Descri ...
- python3--算法基础:二维数组转90度
python3--算法基础:二维数组转90度 [0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3][0, 1, 2, 3] 二维数组转90度 [0, 0, 0, 0][1, 1, ...
- 洛谷P1276 校门外的树(增强版)未完工
题目描述 校门外马路上本来从编号0到L,每一编号的位置都有1棵树.有砍树者每次从编号A到B处连续砍掉每1棵树,就连树苗也不放过(记 0 A B ,含A和B):幸运的是还有植树者每次从编号C到D 中凡是 ...
- spoj 839 最小割+二进制
#include<stdio.h> #include<string.h> #include<queue> using namespace std; #define ...
- msp430入门编程40
msp430中C语言的软件工程--前后台程序结构
- for-else和wihle-else组合用法
当for和else组合一起使用的时候,for循环正常执行完毕,会执行else语句,否则,不会执行else语句 for i in range(10): if i == 2: break else: pr ...