ASP.NET-属性与过滤器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET-属性与过滤器相关的知识,希望对你有一定的参考价值。

目的:在调用操作之前或者之后执行特定的逻辑代码
系统定义:
1.日志记录
2.防图像盗链 
3.爬虫
4.本地化,用于设定区域设置
5.动态操作,用于将操作注入到控制器当中
用来过滤HTTP请求
高级编程Attribute的一种特例
1.AuthorizeAttribute通过身份验证和授权(可选)限制访问
2.HandleErrorAttribute制定如何处理由操作方法引起的异常
3.OutputCacheAttribute提供输出缓存
4.RequireHttpsAttribute强制请求通过HTTPS重新发送
过滤器的顺序就是按照下面的顺序来执行的
技术分享

也可以在app_start中加入这个代码来让所有的action实现这个方法
  1. public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  2. {
  3. filters.Add(new HandleErrorAttribute());
  4. filters.Add(new logFilterAttribute()); //这一行是新加入的
  5. }


在FilterConfig中添加新的覆写过滤规则

技术分享

覆写OnActionExecuting方法,然后在Controller的action中只要添加 [logFilter] 属性就可以直接使用过滤器方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class logFilterAttribute : ActionFilterAttribute
{
    // 在方法执行之前拦截
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //跳转 登录页面
        if (filterContext.HttpContext.Session["UserName"] == null)
        {
            filterContext.Result = new RedirectToRouteResult(
                                   new RouteValueDictionary
                           {
                               { "Controller", "Account" },
                                  { "Action", "Login" }
                                            });
        }
        base.OnActionExecuting(filterContext);
       
    }
 
}
1
2
3
4
5
[Authorize]
        public ActionResult TestAuthorize()
        {
            return View();
        }




























以上是关于ASP.NET-属性与过滤器的主要内容,如果未能解决你的问题,请参考以下文章

asp.net页面实用代码片段

asp.net core prerender webpack 错误:TypeError:无法读取属性“过滤器”

Autofac - ASP.NET Core 中的动作过滤器中的属性注入

csharp 一个过滤器属性,允许您将ASP.NET MVC视图下载为Word文档

ASP.net MVC 代码片段问题中的 Jqgrid 实现

csharp 过滤属性以捕获和记录ASP.NET中的请求和响应