ylbtech-Unitity: cs-Filters

HealthcareAuthorizeAttribute.cs

HealthcareHandleErrorAttribute.cs

HealthcareJSONHandleErrorAttribute.cs

1.A,效果图返回顶部
 
1.B,源代码返回顶部
1.B.1,HealthcareAuthorizeAttribute.cs
using Healthcare.Framework.Web.Mvc.Authentication;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
using System.Web.Security; namespace Healthcare.Framework.Web.Mvc
{
public class HealthcareAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
{
//So now we are validating for secure part of the application
var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
var actionName = filterContext.ActionDescriptor.ActionName;
var controllerType = filterContext.Controller; //skip authorization for specific part of application, which have deliberately marked with [SkipAuthorizaion] attribute
if (filterContext.ActionDescriptor.IsDefined(typeof(SkipAuthorizaionAttribute), true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(SkipAuthorizaionAttribute), true))
{
return;
}
//filterContext.HttpContext.Session["User"] = new Users()
//{
// EmployeeId = "79",
// EmployeeName = "Tom",
// LoginId = "2",
// LoginName = "Tom.xu",
// OrganizationID = "90",
// OrganizationCode = "01",
// OrganizationName = "总院"
//};
#if DEVBOX
filterContext.HttpContext.Session["User"] = new Users() { EmployeeId = "", EmployeeName = "Tom", LoginId = "", LoginName = "Tom.xu",
OrganizationID="",OrganizationCode="",OrganizationName="总院"};
#endif if( filterContext.HttpContext==null)
{
throw new MvcException("用户登录过期,请重新登录!");
} if (filterContext.HttpContext == null
|| filterContext.HttpContext.Session == null
|| filterContext.HttpContext.Session["User"] == null
|| !(filterContext.HttpContext.Session["User"] is Users)
|| (filterContext.HttpContext.Session["User"] as Users) == null )
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
throw new MvcException ("用户登录过期,请刷新窗口以后重新登录!");
}
else
{
filterContext.HttpContext.Session["RequestOldUrl"] = filterContext.HttpContext.Request.Url;
//filterContext.HttpContext.Session["RequestOldUrl"] = filterContext.HttpContext.Request.UrlReferrer; filterContext.Result = new RedirectResult("~/Account/LogOn"); //new HttpUnauthorizedResult("用户未登陆!");
return;
}
} var user = filterContext.HttpContext.Session["User"] as Users; if (filterContext.ActionDescriptor.IsDefined(typeof(PermissionsAttribute), true)
|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(PermissionsAttribute), true))
{
var controllerAttribute = filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(PermissionsAttribute), true).Cast<PermissionsAttribute>().FirstOrDefault();
var actionAttribute = filterContext.ActionDescriptor.GetCustomAttributes(typeof(PermissionsAttribute), true).Cast<PermissionsAttribute>().FirstOrDefault();
if (!IsUserAuthorized(user, controllerAttribute, actionAttribute))
{
throw new NoPermissionException("用户无权进行操作!");
}
} // base.OnAuthorization(filterContext);
} private static bool IsUserAuthorized(Users user, PermissionsAttribute controllerPermissions, PermissionsAttribute actionPermissions)
{
var effective = PermissionsAttribute.Merge(controllerPermissions, actionPermissions); if (effective.Allow.Length == )
return false; bool isUserAuthorized = effective.Allow.All(user.HasPermission);
return isUserAuthorized;
}
} [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public sealed class SkipAuthorizaionAttribute : Attribute { } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class PermissionsAttribute : Attribute
{
public PermissionsAttribute(params string[] allow)
{
Allow = allow ?? new string[];
} public string[] Allow { get; private set; } public static PermissionsAttribute Merge(params PermissionsAttribute[] permissions)
{
if (permissions == null)
{
return new PermissionsAttribute();
} var allNotNullPermissions = permissions.Where(p => p != null); if (!allNotNullPermissions.Any())
{
return new PermissionsAttribute();
} return new PermissionsAttribute
{
Allow = allNotNullPermissions.Aggregate(new List<string>(),
(list, permissionsAttribute) =>
{
list.AddRange(permissionsAttribute.Allow);
return list;
}).ToArray()
};
}
}
}

1.B.2,HealthcareHandleErrorAttribute.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
using System.Web;
using Elmah; namespace Healthcare.Framework.Web.Mvc
{
public class HealthcareHandleErrorAttribute : FilterAttribute, IExceptionFilter
{
// private Lazy<ILogger> logger = new Lazy<ILogger>(() => KernelContainer.Kernel.Get<ILogger>()); public virtual void OnException(ExceptionContext filterContext)
{
string controllerName = filterContext.RouteData.Values["Controller"] as string;
string actionName = filterContext.RouteData.Values["action"] as string; if (!filterContext.HttpContext.Request.IsAjaxRequest())
{
var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
filterContext.Result = new ViewResult
{
ViewName = "Error",
ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
TempData = filterContext.Controller.TempData,
//ViewData["aa"] = filterContext.Controller.ViewBag.asd
};
filterContext.ExceptionHandled = true;
} if (!filterContext.ExceptionHandled
|| TryRaiseErrorSignal(filterContext)
|| IsFiltered(filterContext))
return; if (filterContext.ExceptionHandled)
{
if (TryRaiseErrorSignal(filterContext) || IsFiltered(filterContext))
return; LogException(filterContext); //自定义日志
//Logging.ErrorLoggingEngine.Instance().Insert("action:" + actionName + ";sessionid:" + (filterContext.HttpContext.GetHttpSessionId()), filterContext.Exception);
} } private static bool TryRaiseErrorSignal(ExceptionContext context)
{
var httpContext = GetHttpContextImpl(context.HttpContext);
if (httpContext == null)
return false;
var signal = ErrorSignal.FromContext(httpContext);
if (signal == null)
return false;
signal.Raise(context.Exception, httpContext);
return true;
} private static bool IsFiltered(ExceptionContext context)
{
var config = context.HttpContext.GetSection("elmah/errorFilter")
as ErrorFilterConfiguration; if (config == null)
return false; var testContext = new ErrorFilterModule.AssertionHelperContext(
context.Exception,
GetHttpContextImpl(context.HttpContext));
return config.Assertion.Test(testContext);
} private static void LogException(ExceptionContext context)
{
var httpContext = GetHttpContextImpl(context.HttpContext);
var error = new Error(context.Exception, httpContext);
ErrorLog.GetDefault(httpContext).Log(error);
} private static HttpContext GetHttpContextImpl(HttpContextBase context)
{
return context.ApplicationInstance.Context;
}
}
}

1.B.3,HealthcareJSONHandleErrorAttribute.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc; namespace Healthcare.Framework.Web.Mvc
{
public class HealthcareJSONHandleErrorAttribute : HealthcareHandleErrorAttribute
{
public HealthcareJSONHandleErrorAttribute()
: base()
{
} public override void OnException(ExceptionContext filterContext)
{
Controller controller = filterContext.Controller as Controller;
Exception exception = filterContext.Exception; if (controller != null)
{
controller.Response.TrySkipIisCustomErrors = true;
controller.Response.StatusCode = (int)HttpStatusCode.AjaxErrorResult; object resultData;
if (exception.GetType() == typeof(System.TimeoutException))
{
resultData = new
{
DisplayMessage = "系统超时",
DetailMessage = exception.ToString(),
};
}
else
{
MvcException mvcException = exception as MvcException; if (mvcException != null)
{
resultData = mvcException.GetClientResultData();
}
else
{
resultData = new
{
DisplayMessage = "未知错误",
DetailMessage = exception.ToString(),
};
}
}
filterContext.Result = new JsonResult { Data = resultData, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; filterContext.ExceptionHandled = true;
} base.OnException(filterContext);
}
}
}

1.B.4,

1.C,下载地址返回顶部
作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

cs-Filters的更多相关文章

  1. MVC中的过滤器

    authour: chenboyi updatetime: 2015-05-09 09:30:30 friendly link:   目录: 1,思维导图   2,过滤器种类(图示) 3,全局过滤器 ...

  2. 7天玩转 ASP.NET MVC

    在开始时请先设置firefox中about:config中browser.cache.check_doc_frequecy设置为1,这样才能在关闭浏览器时及时更新JS 第一.二天的内容与之前的重复,这 ...

  3. System.Web.Mvc.Filters.IAuthenticationFilter.cs

    ylbtech-System.Web.Mvc.Filters.IAuthenticationFilter.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Cultu ...

  4. SharePoint 2007 Full Text Searching PowerShell and CS file content with SharePoint Search

    1. Ensure your site or shared folder in one Content Source. 2. Add file types. 3. The second step in ...

  5. Global.asax.cs介绍

    转载  http://www.cnblogs.com/tech-bird/p/3629585.html ASP.NET的配置文件 Global.asax--全局应用程序文件 Web.config--基 ...

  6. aspx.cs上传文件

    aspx.cs文件 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  7. MVC中的Startup.Auth.cs、BundleConfig.cs、FilterConfig.cs和RouteConfig.cs

    一.MVC中的Startup.Auth.cs.BundleConfig.cs.FilterConfig.cs和RouteConfig.cs四个文件在app_start中 <1>Bundle ...

  8. ASP.NET Core 菜鸟之路:从Startup.cs说起

    1.前言 本文主要是以Visual Studio 2017 默认的 WebApi 模板作为基架,基于Asp .Net Core 1.0,本文面向的是初学者,如果你有 ASP.NET Core 相关实践 ...

  9. ASP.NET Core 2 学习笔记(十四)Filters

    Filter是延续ASP.NET MVC的产物,同样保留了五种的Filter,分别是Authorization Filter.Resource Filter.Action Filter.Excepti ...

  10. .net core MVC 通过 Filters 过滤器拦截请求及响应内容

    前提: 需要nuget   Microsoft.Extensions.Logging.Log4Net.AspNetCore   2.2.6: Swashbuckle.AspNetCore 我暂时用的是 ...

随机推荐

  1. python3 面向对象、类、继承、组合、派生、接口、子类重用父类方法

    对象是特征(变量)与技能(函数)的结合体而类是一系列对象共同的特征与技能的集合体 class teacher: lesson = "python" def __init__(sel ...

  2. 如何加快Eclipse的启动速度?

    http://it.taocms.org/12/6457.htm 浅析配置更快的Eclipse方法 What is the Metadata GC Threshold and how do I tun ...

  3. DDD——让天下没有难调的程序

    https://www.linuxidc.com/Linux/2016-11/137343.htm DDD全称Data Display Debugger,当我第一次见到它时,它的界面着实让我吃了一惊, ...

  4. UVALIVE 5096 Volume

    This time your job is to calculate the volume of a special object. The object consists of two orthog ...

  5. Linux下进程描述(1)—进程控制块【转】

    转自:http://www.cnblogs.com/33debug/p/6705391.html 进程概念介绍 进程是操作系统对运行程序的一种抽象. • 一个正在执行的程序: • 一个正在计算机上执行 ...

  6. 【python】正则表达式相关

    注意:Python3.X 的print要有括号, Python 2.x的不需要 放上学习时写的例子: import re m = re.match(r'(\w+) (\w+)(?P<sign&g ...

  7. ORM-老师信息系统

    老师信息管理 思考 三种方式创建多对多外键方式及其优缺点. 通过外键创建 (自定义第三张表,通过外键与其他两张表关联  但是不能用Django ORM 多对多操作的语法) class Class(mo ...

  8. 自己在用的几个sublime text3插件

    Arduino-like IDE ConvertToUTF8 Emmet(前身是zen coding) Keymap Redefiner Package Control PyV8 SideBarEnh ...

  9. (四)mysql数据类型

    数据类型基本介绍 数值类型 整形类型:tinyint,int,bigint 浮点类型:float,double 字符串类型 char系列:char varchar text系列:text blob系列 ...

  10. Codeforces 810 B. Summer sell-off

    B. Summer sell-off   time limit per test 1 second memory limit per test 256 megabytes input standard ...