dncMVC_FILTER

ASP.NET Core MVC 过滤器介绍
https://www.cnblogs.com/tdfblog/p/filters-in-aspnet-core-mvc.html

asp.net core的执行顺序是,收到一个请求后,request请求会先经过已注册的中间件,然后会进入到mvc的拦截器管道

调整过滤器执行顺序
[MyFilter(Name = “Controller Level Attribute”, Order=1)]

Authorization Filters

Resopurces Filters

Model Binding

Action Filters

Excepition Filters

Result Filters

Result Exception

AP:10.134.167.89 G1700336 2wsx#EDC sHEr8SB5a719

services.AddControllersWithViews(options =>
{
options.Filters.Add< FilterController > ();

namespace CMVC
{
public class FilterController: ActionFilterAttribute
{

    public override void OnActionExecuting(ActionExecutingContext context)
    {
        //拦截全局里是否带了token
        //if (string.IsNullOrEmpty(context.HttpContext.Request.Query["token"]))
        //{
        //    context.Result = new JsonResult(
        //        //该类是KeeSoft框架里自带的一个返回结果集
        //        new KeeSoft.Core.ResponseMessage()
        //        {
        //            Status = KeeSoft.Core.ResponseStatus.ERROR.ToString(),
        //            Text = "token缺失"
        //        }
        //    );
        //}

        假设有这么类可以将token解析成用户基本信息
        //KeeSoft.Mini.Utils.User user =
        //    new KeeSoft.Mini.Utils.User(context.HttpContext.Request.Query["token"]);

        接着我们将这个user实例注册到控制器的方法里,之后你在控制器里命名带有user的参数,
        将自动转成 KeeSoft.Mini.Utils.User类型的实例
        //context.ActionArguments["user"] = user;
    }

}

}

// IAuthorizationFilter 的一个实现
using System.Linq;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc;
namespace Sample
{
public class AdminRequired : IAuthorizationFilter
{
public void OnAuthorization(AuthorizationFilterContext context)
{
if(context.Filters.Any(it=>it is Microsoft.AspNetCore.Mvc.Authorization.IAllowAnonymousFilter))
{

        }
        else
        {
            string userName = context.HttpContext.Session.GetString("username");

            if (string.IsNullOrEmpty(userName ))
            {
                RedirectResult result = new RedirectResult("~/Login");
                context.Result = result;
            }
            else
            {

            }
        }
    }
}

}

这里使用了Session,需要先在Startup.cs中定义:
public void ConfigureServices(IServiceCollection services)中添加

services.AddSession();

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 中添加

app.UseSession();

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Authorization;
namespace MoMaMiBiao.Controllers
{
[TypeFilter(typeof(Sample.AdminRequired))] //声明Admin下面的方法如无例外都需要AdminRequired权限
public class AdminController : Controller
{
public IActionResult Index()
{
return View("~/wwwroot/Admin/Index.cshtml");
}
public IActionResult Welcome()
{
return View("~/wwwroot/Admin/Welcome.cshtml");
}
[TypeFilter(typeof(AllowAnonymousFilter))] //声明Login方法是完全开放,无需验证
public IActionResult Login()
{
return View("~/wwwroot/Admin/Login.cshtml");
}
}
}

public void OnAuthorization(AuthorizationContext filterContext)
{
string name = context.HttpContext.User.Identity.Name;

string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
string actionName = filterContext.ActionDescriptor.ActionName;
if(controllerName==“Login”&&(actionName.ToUpper()==“index”.ToUpper() || actionName.ToUpper() == “login”.ToUpper()))
{

}
else
{
//检查登陆状态
if (filterContext.HttpContext.Session[“username”] == null)
{
ContentResult con = new ContentResult();
con.Content = “没有登陆”;
filterContext.Result = con;
}
}
}

.net core 基础认证
https://bigger.ee/archives/17.html

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.Filters.Add(typeof(MyActionOneAttribute));
});
}

[MyActionThree]
public class HomeController : BaseController
{
[MyActionFour]
public IActionResult Index()
{
using (var writer = new StreamWriter(HttpContext.Response.Body))
{
writer.Write(“

Index
”);
}

    return new EmptyResult();
}

}

public class MyActionOneAttribute : Attribute, IActionFilter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值