以前项目的代码比较陈旧,今天抽空优化了一下.作为记录.

以前每次请求一个方法都要验证是否登录 if xxx等  现在通过global文件中的改进 反射这个方法的属性是否需要权限

要的话先验证权限.以下代码 只提供思路和演示.

如何使用

global中的写法是

  protected void Application_AuthenticateRequest(object sender, EventArgs e)
{ if (HttpContext.Current != null)
{
byte[] byts = new byte[HttpContext.Current.Request.InputStream.Length]; HttpContext.Current.Request.InputStream.Read(byts, , byts.Length);
string req = System.Text.Encoding.Default.GetString(byts);
req = HttpContext.Current.Server.UrlDecode(req);
if (!string.IsNullOrEmpty(req))
{
req = req.Replace("data=", "");
var ajaxModel = Utils.JsonHelper.FromJson<AjaxRequestModel>(req);//把请求的流转换为json
string methodName = ajaxModel.MethodAlias;
var className = AjaxCache.GetClassName(methodName); string assemblyName = "Test.Module"; if (!String.IsNullOrEmpty(assemblyName) && !String.IsNullOrEmpty(className))
{
Assembly assembly = GetAssembly(assemblyName);//我这里用的缓存来实现资源加载的不然每次都需要反射
Type type = assembly.GetType(className, true, true);
if (type != null)
{
MethodInfo[] methodInfos = type.GetMethods();
foreach (MethodInfo mi in methodInfos)
{
System.Attribute[] attrs = System.Attribute.GetCustomAttributes(mi); //反射获得用户自定义属性
foreach (System.Attribute attr in attrs)
{
if (attr is CheckLoginAttribute)
{
CheckLoginAttribute a = (CheckLoginAttribute)attr;
System.Console.WriteLine("过了没? ", a.IsLogin);//这里也可以处理 也可以不处理.
}
} } }
} }
}
}
   /// <summary>
/// 反射资源缓存调用
/// </summary>
/// <param name="assemblyName"></param>
/// <returns></returns>
private static Assembly GetAssembly(string assemblyName)
{
object assemblyObject = CacheHelper.GetCache(assemblyName);//这里可以用 iis缓存来实现 if (assemblyObject == null)
{
Assembly assembly = null;
assembly = Assembly.Load(assemblyName);
CacheHelper.SetCache(assemblyName, assembly, DateTime.Now.AddMinutes());
return assembly;
}
else
{
return (Assembly)assemblyObject;
}
}
 [AttributeUsage(AttributeTargets.Method,AllowMultiple=false, Inherited=true  )]
public class CheckLoginAttribute : Attribute
{ /// <summary>
/// 检测是否登录
/// </summary> public bool IsLogin { get; set; }
public CheckLoginAttribute( )
{
try
{
if (==)
{
IsLogin = true;
//throw new Exception("登录错啦");
//var model = new ResponseInfo { State = ResultState.Failed, ErrorMessage = "您未登录,请登录!" };
//HttpContext.Current.Response.Write(JsonConvert.SerializeObject(model));
//HttpContext.Current.Response.End();
}
else
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Write("{State:1,Msg='未登录'}");
HttpContext.Current.Response.End(); } }
catch (Exception ex)
{
LogHelper.WriteExceptionLog("CheckLoginAttribute", ex);
throw;
} } }

asp.net web form中 用attribute实现权限验证方式的更多相关文章

  1. 在 ASP.NET Web API 中使用 Attribute 统一处理异常

    并非所有的异常都需要 try-catch 进行重复的处理,这会导致大量的重复性代码,一旦后续系统出现异常处理机制的修改,随着代码量增多,修改也会变的更加困难. ASP.NET Web API 中特别增 ...

  2. ASP.NET Web API中实现版本的几种方式

    在ASP.NET Web API中,当我们的API发生改变,就涉及到版本问题了.如何实现API的版本呢? 1.通过路由设置版本 最简单的一种方式是通过路由设置,不同的路由,不同的版本,不同的contr ...

  3. Asp.net Mvc4 基于Authorize实现的模块权限验证方式

    在MVC中,我们可以通过在action或者controller上设置Authorize[Role="xxx"] 的方式来设置用户对action的访问权限.显然,这样并不能满足我们的 ...

  4. ASP.NET Web Form和MVC中防止F5刷新引起的重复提交问题

    转载 http://www.cnblogs.com/hiteddy/archive/2012/03/29/Prevent_Resubmit_When_Refresh_Reload_In_ASP_NET ...

  5. 在asp.net web form项目中添加webapi接口

    我有一个支付宝服务网关是ASP.NET WEB FORM项目,但是最近这个网关需要对外提供几个接口,想了下,使用web api比较合适,实现很简单,GO 1,首先添加一个文件夹名字叫App_Start ...

  6. 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]

    如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...

  7. Asp.net web form url route使用总结

    asp.net web form 使用URL路由 注不是mvc中的路由 一.前台控件使用路由,通过表达式生成url地址,注意给路由参数赋值,防止使用了其他路由表达式值方式1:<asp:Hyper ...

  8. ASP.Net Web Form<一> aspx文件编译及呈现

    对比复习下JSP 1.jsp的本质是Servlet ,会在第一次被访问时会被翻译成一个类文件,从此对这个页面的访问都是由这个类文件执行后进行输出. aspx 本质是IHttpHandler 2.jsp ...

  9. 【ASP.NET Web API教程】6.2 ASP.NET Web API中的JSON和XML序列化

    谨以此文感谢关注此系列文章的园友!前段时间本以为此系列文章已没多少人关注,而不打算继续下去了.因为文章贴出来之后,看的人似乎不多,也很少有人对这些文章发表评论,而且几乎无人给予“推荐”.但前几天有人询 ...

随机推荐

  1. ArcGis :正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。

    解决此异常的方法有以下两种: 方法一 把vs2005菜单的 调试->异常->Managed Debuggin Assistants->LoaderLock 的选中状态去掉  如果异常 ...

  2. oracle 逗号分割,列转行,行转列

    SQL代码 列转行 select REGEXP_SUBSTR(a.rolecode ,,l) rolecode from ( select 'a,aa,aaa' rolecode from dual ...

  3. IIS 发布网站到外网

    前段时间做了一个项目在局域网中测试后要发布到外网上,一时间不知怎么搞,以为直接在IIS中修改发布时的IP就可以了,但是不可行,经过摸索终于成功发布到外网,下面是具体步骤. 前期准备:公网IP,掩码,网 ...

  4. Microsoft.SharePoint.Security的问题

    请求“Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0 ...

  5. 简单遗传算法求解n皇后问题

    版权声明:本文为博主原创文章,转载请注明出处. 先解释下什么是8皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法.在不 ...

  6. android中数据存储的contentprovider的使用方法

    元数据接口 package com.example.contentproviderprojecrt; import android.net.Uri; import android.provider.B ...

  7. JDBC之数据连接

    :数据库语句: create database LandDB; use LandDB; create table T_BL_CANTON_CODE ( CTN_CODE int primary key ...

  8. JSP之初识2

    <与%之间不可有空格,但是后面可以有空格 <%@ page language="java" import="java.util.*" pageEnc ...

  9. ### C++总结-[类的继承]

    面向对象中关于继承的总结. #@author: gr #@date: 2015-07-26 #@email: forgerui@gmail.com 一.类的隐藏 重载(overload).覆盖(ove ...

  10. 第六篇、AVplayer定制视频播放控件

    1.引用头文件#import AVFoundation 2.自定义AVPlayer(播放的机器) 3.自定义AVPlayerItem(胶片) >> 视频的URL转成AVAsset 4.AV ...