MVC 筛选器 过滤器 消息拦截

ASP.NET Core MVC 筛选器  
1、继承Controller【MVC】

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WebApplication1.App_Start
{
    public class ControllerValidateAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext actionContext)
        {
            var conLoginName = ConfigurationManager.AppSettings["LoginName"].ToString();
            try
            {
                string loginName = actionContext.HttpContext.Request.Url.AbsolutePath.ToLower().TrimEnd('/').ToString();
                if (loginName != conLoginName)
                {
                    var conKey = ConfigurationManager.AppSettings["InfoAPIKey"].ToString();
                    var token = actionContext.HttpContext.Request.Headers.Get("token").First().ToString();
                    if (token == conKey)
                    {
                        //actionContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary(new { Controller = "", action = "" }));
                    }
                    else
                    {
                        actionContext.Result = new ContentResult { Content = @"The illegal user access" };
                    }
                }
            }
            catch (Exception ex)
            {
                actionContext.HttpContext.Response.Write(ex);
            }
        }
    }
}

2、继承ApiController【API接口】

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;

namespace WebApplication1.App_Start
{
    public class ApiControllerValidateAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            var conLoginName = ConfigurationManager.AppSettings["LoginName"].ToString();
            try
            {
                string loginName = actionContext.Request.RequestUri.AbsolutePath.ToLower().TrimEnd('/').ToString();
                if (loginName != conLoginName)
                {
                    var conKey = ConfigurationManager.AppSettings["InfoAPIKey"].ToString();
                    var token = actionContext.Request.Headers.GetValues("token").First().ToString();
                    if (token == conKey)
                    {
                        //成功
                    }
                    else 
                    {
                        //失败
                        actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Forbidden);
                    }
                }
            }
            catch (Exception ex)
            {
            }
            base.OnActionExecuting(actionContext);
        }
    }
}

3、需要调用的 Controller【MVC】类上加上验证类名

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication1.App_Start;

namespace WebApplication1.Controllers
{
    [ControllerValidate]
    public class Test1Controller : Controller
    {
        //
        // GET: /Test1/
        public ActionResult Index()
        {
            return View();
        }
    }
}

4、需要调用的 ApiController【API接口】类上加上验证类名

using WebApplication1.App_Start;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace MvcApplication1.Controllers
{
    [ApiControllerValidate]
    public class TestController : ApiController
    {
        [HttpGet]
        public dynamic Index()
        {
            return Request.CreateResponse(HttpStatusCode.OK, new
            {
                Success = true,
                Message = ""
            });
        }
    }
}

5、WebAPI项目,启用全局过滤器限制【WebAPI】
1、添加自定义过滤器
2、在【App_Start】文件夹【FilterConfig.cs】文件中的【RegisterGlobalFilters】方法注册全局过滤器,这样每个请求都会执行过滤器;

using System.Web.Mvc;

namespace WebAPI
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new DueDateAttribute());
        }
    }
}

6、Web项目,启用全局过滤器限制【Web】
1、添加自定义过滤器
2、在【App_Start】文件夹【FilterConfig.cs】文件中的【RegisterGlobalFilters】方法注册全局过滤器,这样每个请求都会执行过滤器;

using Web.App_Start;
using Web.Filter;
using System.Web.Mvc;

namespace Web
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            //filters.Add(new UserInfoAttribute());
            filters.Add(new ExceptionFilter());
            filters.Add(new ResultActionFilter());
            filters.Add(new JsonFormatConfig());
        }
    }
}

*
*
*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值