asp.net core razor和api 都同时支持登录身份判断属性写法

浪淘沙2个月前后端65
using Microsoft.AspNetCore.Mvc.Filters;namespace xxtsoft.Application.Filters{
    /// <summary>
    /// 登录验证特性
    /// 同时支持:
    /// 1. Furion DynamicApi / MVC Controller
    /// 2. Razor Page
    /// </summary>
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class ApiAuthorizeAttribute : Attribute,        IAsyncActionFilter,        IAsyncPageFilter
    {

        /// <summary>
        /// 检查当前用户是否登录
        /// 这里使用 Session 判断
        /// </summary>
        private bool CheckLogin(HttpContext context)
        {
            var session = context.Session;            var teaid = session.GetString("teaid");            var teaxm = session.GetString("teaxm");            var teabm = session.GetString("teabm");            // 三个关键字段都存在,认为登录有效
            return !string.IsNullOrEmpty(teaid)
                && !string.IsNullOrEmpty(teaxm)
                && !string.IsNullOrEmpty(teabm);        }



        /// <summary>
        /// API / Furion DynamicApi 请求验证
        /// 例如:
        /// [ApiAuthorize]
        /// public class HbExtService : IDynamicApiController
        /// </summary>
        public async Task OnActionExecutionAsync(
            ActionExecutingContext context,            ActionExecutionDelegate next)
        {

            // 未登录
            if (!CheckLogin(context.HttpContext))
            {

                // API 返回 JSON
                context.Result = new JsonResult(new
                {
                    code = 401,
                    msg = "登录已失效,请重新登录"
                });                return;            }


            // 登录有效,继续执行接口方法
            await next();        }

        /// <summary>
        /// Razor Page 请求验证
        /// 例如:
        /// [ApiAuthorize]
        /// public class indexModel : PageModel
        /// </summary>
        public async Task OnPageHandlerExecutionAsync(
            PageHandlerExecutingContext context,            PageHandlerExecutionDelegate next)
        {


            // 未登录
            if (!CheckLogin(context.HttpContext))
            {

                // Razor 页面跳转到登录页
                context.Result = new RedirectToPageResult("/hb/login");                return;            }


            // 登录有效,继续执行 OnGet / OnPost
            await next();        }




        /// <summary>
        /// Razor Page Handler选择阶段
        /// 必须实现,但这里不需要处理
        /// </summary>
        public Task OnPageHandlerSelectionAsync(
            PageHandlerSelectedContext context)
        {
            return Task.CompletedTask;        }
    }}

用法:

[ApiAuthorize]public class indexModel : PageModel{
 [ApiAuthorize]
 public class HbExtService : IDynamicApiController, ITransient
 {


相关文章

Microsoft Visual Studio Installer Projects 2022的安装与使用

https://www.cnblogs.com/jiayezi/p/15740161.html...

HttpClient 远程post,获取数据并对数组进行处理

using System.Text.Json; namespace xxtsoft.Web.Entry.Pages.sysadmins.ansyc {  &nb...

使用 Razor Pages 的多个 Handler

<form method="post" asp-page-handler="Save">    ...

Aspose.Words 插入图片

        #region 创建 Word 文档   &...

_LayoutAdmin.cshtml 取得url,调用ViewComponent 视图

_LayoutAdmin.cshtml 取得url,调用ViewComponent 视图

<body id="watermark-parent"> @{ var name = Furion.App.HttpC...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。