ActionFilterAttribute的一点问题

问题描述

需求是这样:需要根据用户的appid进行判断,看是否有访问某个action的权限,由于在controller中只公开了index,其他action对用户而言是不可知也不可直接访问,代码示例如下:publicJsonResultIndex(){JsonResultresult=newJsonResult();switch(Method.ToLower()){case"getteacherbyuserid":result=GetTeacherByUserId();break;default:result=BuildErrorMessage(string.Format("{0}.{1}方法不存在","TeacherController",Method));break;}returnresult;}[NonAction]publicJsonResultGetTeacherByUserId(){ResultDataresultData=newResultData();stringuserid="",error="";if(!GetSafeString("userid",refuserid,outerror)){resultData.Error=error;resultData.State=0;returnJson(resultData);}try{resultData.Data=_teacherService.GetTeacherByUserId(userid);resultData.State=1;}catch(Exceptionex){resultData.State=0;resultData.Error=ex.Message;}returnJson(resultData);}

然后我写了一个ActionFilterAttribute,在其中对发来请求的用户做了判断,代码大致如下:publicclassMethodAuthorizationFilter:ActionFilterAttribute{///<summary>///需要验证的Action名称集合('|'隔开)///</summary>publicstringMethod{get;set;}///<summary>///Action执行之前///</summary>///<paramname="filterContext"></param>publicoverridevoidOnActionExecuting(ActionExecutingContextfilterContext){//若没有配置需要验证的Action,则该Controller所有方法都需进行权限校验if(string.IsNullOrEmpty(Method)){VerifyRequest(filterContext);}else{//需要验证的Action集合varactionList=Method.ToLower().Split('|');//请求的Action名称stringactionName=filterContext.HttpContext.Request.Form["method"];if(actionList.Contains(actionName.ToLower())){VerifyRequest(filterContext);}}base.OnActionExecuting(filterContext);}///<summary>///请求权限校验///</summary>///<paramname="filterContext"></param>privatevoidVerifyRequest(ActionExecutingContextfilterContext){//下略}}

然后问题来了,如果我将这个Attribute加在index上,是可以工作的,如果加在GetTeacherByUserId上则不起作用,请高人指点,分数不多,尚请海涵。

解决方案

时间: 2024-11-08 17:28:15

ActionFilterAttribute的一点问题的相关文章

分享我对代码命名的一点思考和理解

一个软件最后都会落实到代码.而代码,其背后的架构设计或设计思想或模式固然重要,但我觉得更重要的东西则是良好的命名.混乱或错误的命名不仅让我们对代码难以理解,更糟糕的是,会误导我们的思维,导致对代码的理解完全错误.相反,良好的命名,则可以让我们的代码非常容易读懂,也能向读者正确表达事物以及逻辑的本质,从而使得代码的可维护性就大大增强,读命名好的文章是非常流畅的,会有一种享受的感觉. 另外一点也许大家还没感受到,那就是良好的命名,以及良好的命名习惯,由于我们总是对每个概念的名称要求非常苛刻,我们会思

清华大学计算机科学与技术系副教授张敏:当人工智能“科学遇到艺术”的一点杂谈

清华大学计算机科学与技术系副教授张敏 大会第二天下午,清华大学计算机科学与技术系副教授张敏参与了[人工智能科学与艺术论坛]的讨论,并发表了<当人工智能"科学遇到艺术"的一点杂谈>主题演讲.张敏教授认为,人工智能与人的智能,不应该也从来就不是对立关系,人的智慧能够与机器智能相结合,让用科学的方式创作艺术成为可能. 以下为演讲实录,在不改变原意的情况下进行了删减和调整. 什么是科学,什么是艺术? 什么是科学,它在拉丁文里面是知识的意思,简单来说其实它是我们对知识的一种系统性的构

做分页器时的一点感触

1. 问题的由来 前段时间要做一个分页器, 大概是下面这个样子: 1 2 3 ... 7 [8] 9 ... 12 13 14 只要有一点相关经验的人都知道, 这个看似简单的东西, 实现起来其实是很麻烦的. 原因在于, 你面对的"总页数和当前页的关系", 不一定是上面这种"理想情况". 比如: 一共只有 3 页: 1 2 3 一共有 4 页: 1 2 3 4 一共有 6 页: 1 2 3 4 5 6 一共有 7 页(当前页是第 6 页): 1 2 3 ... 5 [

关于gcc的一点小人性化提示

    现在对于大多数平台的C编译器来说都会有很多种选择,而gcc和clang无疑是2个非常优秀的C编译器.当然他们也不只是C编译器.我最近用clang的比较多,原因有很多.不过一些小的细节很让我喜欢,比如OS X系统中,clang的编译器警告或错误提示是以彩色文本醒目打印出来的. 而gcc则无论如何打印的颜色都一样(我不知道是否有什么设置可以改变这一点). 但是gcc也有其人性化的一点,就是在某些比较隐晦的错误时,会有更友好的提示.比如标签后不能直接写声明这种情况,2种编译器的结果如下: #i

关于Java 数组内存分配一点认识

 可能Java 数组大家都很熟悉,最近我遇到了一个关于Java 数组内存分配的问题.         呵呵.突然就发现许多书上"基本数据类型存储在栈内存当中,对象则保存在堆内存"这句话完全是错误的.下面是个简单的例子代码: public class Test { public static void main(String[] argv) { // 静态初始化数组 String[] names = { "Michael", "Orson", &q

汇编语言-汇编MOV的一点疑问!!!

问题描述 汇编MOV的一点疑问!!! DATA SEGMENT USE16 MES1 DB 'Please input:',0AH,0DH,'$' SD DB ? DATA ENDS 然后 MOV AH,1 INT 21H MOV SD,AL 然后就对SD进行操作了 想问下MOV的目的操作数可以是变量(SD)吗??不是只能是寄存器和存储器吗? 解决方案 MOV AH,1 INT 21H 是自动转入中断子程序的入口 通过上面两条指令,会把输入或者读取的字符放到AL中,所以是MOV SD,AL 解决

在redhat Linux9下安装Oracle9.2.0的一点经验

oracle 这个也是我曾经写在大富翁论坛上的笔记,今天也一并转贴一下:http://www.delphibbs.com/keylife/iblog_show.asp?xid=6526 如下:--- 在redhat Linux9下安装Oracle9.2.0的一点经验 作者:jrq 摘要:简述在redhat Linux9环境下安装Oracle9.2.0数据库的过程. 关键字:Oracle9i  redhat Linux9  内核参数  环境变量       一直是在redhat Linux7.1环

string-对getBytes()的一点疑问

问题描述 对getBytes()的一点疑问 我输入的程序是这样的 byte d[]=""你我他"".getBytes(); byte b[]=""hahaha"".getBytes(); System.out.println(""数组d的长度是(一个汉字占两个字节):""+d.length+""个字节""); String s=new String

文件 提取 字-文件按字读取存储引发的一点问题

问题描述 文件按字读取存储引发的一点问题 问题比较复杂: 1.我需要将二进制文件提取出来,加密后存入另一文件 2.由于原始文件按字节(fgetc)提取加密后会变成很大的数(>255),因此不能用fputc来存加密后的数据,这就不可避免的用到putwc.但是putwc会使加密文件变大(由char变成了wchar),而我又想保持源文件大小. 3.我想到了按字提取fgetwc.按字存储fputwc,但是按字提取不能很好解决文件结尾的判定,如果源文件只有"abc"三个字符,那么按字提取只