.NET WebApi之基本过滤器

ASP.NET WebApi技术从入门到实战演练 一、课程介绍 曾经有一位不知名的讲师说过这么一句名言: 一门RPC技术不会,那么千万万门RPC技术将都不会!在今天移动互联网的时代,作为攻城师的我们,谁不想着只写一套API就可以让我们的Web, Android APP, IOS APP, iPad APP, Hybired APP, H5 Web共用共同的逻辑呢? 希望大家学完本次分享课程能够达到使用ASP.NET WebAPI技术,并... 阅读详情

Net WebApi 基本过滤器以及统一返回结果集处理
可以根据自己的业务区更改

using HomeMediaFileManageSystemBusiness.HomeMediaBusiness.BaseApi;
using HomeMediaFileManageSystemUtilts.Log;
using HomeMediaFileManageSystemUtilts.Security;
using HomeMediaFileManageSystemUtilts.Session;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using Newtonsoft.Json;
namespace HomeMediaFileManageSystemApi.Controllers
{
    /***
     * 
     * 系统过滤器  过滤请求进入方法之前和请求进入方法之后执行这些过滤信息
     **/ 
    public class BaseApiFilter: System.Web.Http.Filters.ActionFilterAttribute
    {
        #region 验证  是否是 post 请求   以及登录权限
        /// <summary>
        /// 验证  是否是 post 请求      以及 登录权限
        /// </summary>
        /// <param name="actionContext"></param>
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            //如果有匿名特性  直接返回 不验证
            var isAllow= actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
            if (isAllow) {
                return;
            }
            //检查Action方法是否是post请求
            var isHttpPost = actionContext.ActionDescriptor.GetCustomAttributes<HttpPostAttribute>().Any();
            if (isHttpPost)
            {

                //获取请求中是否有Token参数
                var argument=actionContext.ActionArguments.ToList();
                try
                {
                    JObject obj = JObject.Parse(argument[0].Value.ToString());
                    if (obj.ContainsKey("Token"))
                    {
                        //解密token
                       var decToken= new DESEncrypt().DesDecrypt(obj["Token"].ToString(), "HomeMedia");
                       var account=decToken.Split('&')[0];
                        var pwd = decToken.Split('&')[1];
                        bool isUser = new IsUserVerifyPermissions().IsUserPermission(account, pwd);
                        if (isUser)
                        {
                            return;
                        }
                        else {
                            actionContext.Response = new HttpResponseMessage() { Content = new StringContent("对不起你没有权限访问"), StatusCode = System.Net.HttpStatusCode.OK };
                            Log.Warn("可能有非法用户攻击");
                        }

                    }
                    else {
                        //非法访问不允许
                        actionContext.Response = new HttpResponseMessage() { Content=new StringContent("非法请求不允许"), StatusCode=System.Net.HttpStatusCode.OK };
                    }
                }
                catch (Exception ex)
                {
                    actionContext.Response = new HttpResponseMessage() { Content = new StringContent("无效请求"), StatusCode = System.Net.HttpStatusCode.OK };
                    
                }
            }
            else {
                //不是post请求
                actionContext.Response = new HttpResponseMessage() { Content = new StringContent("此接口不支持GET请求"), StatusCode = System.Net.HttpStatusCode.OK };
            }
        }
        #endregion
        #region  对api方法返回结果做统一处理
        /// <summary>
        /// 对api方法返回结果做统一处理
        /// </summary>
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            //检查Action方法是否有特性
            var attributeAttr = actionExecutedContext.ActionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
            //如果存在则对结果集不进行系统自定义序列化方式
            if (attributeAttr)
            {
                return;
            }
            else {
                //统一处理结果集并序列化
                if (actionExecutedContext.Exception == null) {
                    var obj=actionExecutedContext.ActionContext.Response.Content.ReadAsAsync<object>().Result;
                    HttpResponseMessage message = new HttpResponseMessage() {
                         Content=new StringContent(JsonConvert.SerializeObject(obj)),
                         StatusCode=System.Net.HttpStatusCode.OK,
                    };
                }
            }
        }
        #endregion
    }
}

相关推荐

.Net WebApi 中的Token/参数校验:你真的会了吗?

除了使用OAuth外,我们还可以创建自定义的过滤器来校验Token。这种方法更灵活,可以根据特定需求进行调整。// 进行Token有效性检查if (!// 这里应实现Token校验逻辑// 示例中假定Token总是有效的[HttpGet]代码解析定义了一个名为的自定义过滤器。在方法中检查请求头中的字段。如果Token无效,则返回HTTP 403 Forbidden。如果Token不存在,则返回HTTP 401 Unauthorized。

java专栏 1636

.Net Core WebApi 系列:过滤器Filter

Net Core 过滤器Filter 基本介绍

行成于思,形之于文 2771

AI 体验走查 - 火山引擎存储的 AI UX 探索之路

火山引擎存储技术团队驱动 AI 自主完成用户体验走查 / 可用性测试的执行与评价,帮助业务改善交互体验。 立项“故事走查”的背景诉求和 AI 机遇 如何搭建“AI 评价”能力,精准识别交互问题 让交互体验故事走查变为技术产品,讲解系统设计,包括流程、User Story 维护、框架和 AI 模型选型、Midscene.js 的集成技巧等

bytedanceospo的博客 2841

ASP .NET Core Api 使用过滤器

资源过滤器在模型验证和模型绑定请求之前运行,也在我们的请求结果从服务器返回时运行。ActionFilterAttribute 拦截器通过 重写 OnActionExecuting,来 拦截action的请求消息,当执行OnActionExecuting完成以后才真正进入请求的action中,action运行完后又把控制权给了 OnActionExecuted,这个管道机制可以使我们用它来轻松实现 权限认证、日志记录 ,跨域以及很多需要对全局或者部分请求做手脚的的功能。异步ActionFilter。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 11万+

从仿真到打样:PMOS栅极泄放电路设计全流程复盘与三个踩坑点总结

本文详细复盘了PMOS栅极泄放电路从仿真到打样的全流程设计,重点总结了三个关键踩坑点:三极管BE结过压击穿、静态功耗超标和栅极振荡现象。通过优化缓启动电路、改进保护设计和布局调整,最终实现18ms开通时间、190μs关断时间和8μA静态功耗的工业级性能指标,为类似电源开关设计提供实用参考。

weixin_28693683的博客 371

InSAR_ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场

ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场 ISCE软件做干涉只需要将数据准备好,并配置好insarApp.xml文件即可进行。 一、数据准备 1、SAR数据获取 本利中使用的数据为欧空局提供的sentinel-1A/B数据,可从阿拉斯加数据服务器上下载,具体下载方法可参考: 哨兵数据下载方法. 2、哨兵卫星轨道文件下载 哨兵数据处理除了需要SAR影像外,还需提供轨道参数文件,可从https://qc.sentinel1.eo.esa.int/aux_poeorb/下载。下载

weixin_42128764的博客 1万+

.net webapi post/get请求 过滤器参数处理(token)

public class ApiSecurityFilter : ActionFilterAttribute { public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) { var request = actionContext.Reque...

wqs15192095633的专栏 1994

2025红队实战:Win11环境下ZAP、CobaltStrike与免杀套件深度评测

在网络安全领域,渗透测试与红队行动是评估系统防御能力的关键手段。其核心原理在于模拟真实攻击者的技术与流程,以发现潜在的安全漏洞。这项技术的价值在于主动识别风险,提升整体安全防护水平,广泛应用于企业安全评估、漏洞挖掘和攻防演练等场景。随着Windows 11系统普及,其增强的安全机制(如内存完整性、基于虚拟化的安全)对传统攻击工具链提出了新的挑战。本文聚焦于**CobaltStrike二开版**与**免杀套件**在Win11环境下的实战应用与深度对抗,探讨如何优化工具链以应对现代端点检测与响应(EDR)和高级

weixin_29315091的博客 310

ASP.NET Web API 过滤器创建、执行过程(二)

作者:金源 出处:http://blog.csdn.net/jinyuan0829 本文版权归作者和优快云共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

金源 1741

自动驾驶关键技术(一):时间敏感网络TSN

时间敏感网络TSN的基本概念、协议族介绍和开发流程。

3081

工业预测性维护实战:振动分析+Transformer预警系统构建指南

摘要:本文聚焦工业设备预测性维护难题,提出基于振动分析与Transformer模型的全栈解决方案。通过低成本硬件选型(单传感器¥380)实现设备振动信号实时采集,利用边缘计算单元完成特征工程(RMS、峰度、峰值频率提取),并在云端部署Transformer时序模型进行异常预警。某风电龙头企业实践显示,系统将故障误报率从38%降至6%,维护成本降低58%,非计划停机时长减少87%。文中提供完整的边缘端特征提取代码、云端模型架构及实施流程,适配ISO 13373振动分析标准,为制造业设备健康管理提供可复用的工程

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 627

ASP.NET Web API 过滤器创建、执行过程(一)

在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就如今天的这个篇幅就是在上面内容之后所看到的一个知识要点之一。

金源 3079

Holosoma 开源人形机器人强化学习训练部署框架

Holosoma是一个综合性人形机器人框架,支持强化学习策略的训练、部署和动作重定位。该框架兼容多种模拟器(IsaacGym、IsaacSim、MuJoCo等)和机器人(Unitree G1、Booster T1),提供运动控制和全身追踪功能。主要特性包括:跨模拟器训练评估、Wandb集成、多GPU支持、自定义奖励权重和观测噪声配置。推理模块支持实体机器人部署和MuJoCo仿真测试。动作重定位工具可将人体动作数据转换为机器人动作,支持单序列和批量处理。文档详细介绍了训练配置、评估方法和高级功能,如课程学习和

2506_90492529的博客 1829

MVC—WebAPI(调用、授权)

本系列目录:ASP.NET MVC4入门到精通系列目录汇总 微软有了Webservice和WCF,为什么还要有WebAPI? 用过WCF的人应该都清楚,面对那一大堆复杂的配置文件,有时候一出问题,真的会叫人抓狂。而且供不同的客户端调用不是很方便。不得不承认WCF的功能确实非常强大,可是有时候我们通常不需要那么复杂的功能,只需要简单的仅通过使用Http或Https来调用的增删改查功能,这时,WebAPI应运而生。那么什么时候考虑使用WebAPI呢? 当你遇到以下这些情况的时候,就可以考虑使用Web AP

fangyuan621的专栏 2003

llama.cpp 参数调优大全(4060 最优配置)

本文针对NVIDIA RTX 4060(8GB显存)显卡,提供了llama.cpp参数调优的实战指南。核心策略是采用小模型(7B/8B)配合Q4_K_M量化,通过合理设置GPU层数(-ngl 28)、上下文长度(-c 2048)和批量大小(-b 512)来平衡性能和显存占用。重点推荐启用flash-attn加速和mlock内存锁定,并给出标准、高性能和保守三种配置方案。调优优先级为:GPU利用率>吞吐量>显存>线程数,同时警示避免常见错误如过大上下文或GPU层数设置。最终推荐4060最佳配置为7B Q4_

刘一说的IT专栏 3408

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Web API使用记录系列(一)创建API项目与基本配置

  本系列文章主要记录Web API使用过程中的一些个人总结,包括创建API项目、基础配置、ApiTestClient使用与HelpPage页面的优化、Owin与OAuth的使用等。   本节主要内容是API项目的创建和基本的配置   Aps.net Web API是构建Restful应用程序的.net框架,关于其相关介绍文档等请访问微软的ASP.NET Web APIs  ...

weixin_30535167的博客 655

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ASP.NET MVC5 入门

参考资料《ASP.NET MVC5 高级编程》第5版 第1章 入门 1.1 ASP.NET MVC 简介 ASP.NET MVC是一种构建Web 应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET 框架。 在分离应用程序的关注点方面(例如,从显示逻辑中分离出数据访问逻辑),MVC是一种强大而简洁的方式。 ...

weixin_34128534的博客 229

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Web API 基于ASP.NET Identity的Basic Authentication

  今天给大家分享在Web API下,如何利用ASP.NET Identity实现基本认证(Basic Authentication),在博客园子搜索了一圈Web API的基本认证,基本都是做的Forms认证,很少有Claims认证(声明式认证),而我们在用ASP.NET Identity实现登录,认证,授权的时候采用的是Claims认证。   在Web API2.0中认证接口为IAuthent...

weixin_30693183的博客 180

Web APi之认证(Authentication)及授权(Authorization)【一】(十二)

前言 无论是ASP.NET MVC还是Web API框架,在从请求到响应这一过程中对于请求信息的认证以及认证成功过后对于访问页面的授权是极其重要的,用两节来重点来讲述这二者,这一节首先讲述一下关于这二者的一些基本信息,下一节将通过实战以及不同的实现方式来加深对这二者深刻的认识,希望此文对你有所收获。 Identity Identity代表认证用户的身份,下面我们来看看此接口的定义 pu...

weixin_34351321的博客 421

5-18

.net语言的新特性:lambad表达式、动态和匿名类型.... 大部分基于mvc的web框架的节本原则:1、约定优于配置(convertion over configuration)2、不重复(DRY原则pluggability)3、尽量保持可拔插4、经两位开发人员提供帮助,但必要时允许开发人员自由发挥。 异步控制器 依赖解析器 全局操作过滤器侵入式JavaScript JQuery验证 j...

weixin_34268579的博客 67

.Net6 WebApi入门(过滤器)

ASP .NET Core 中共有5大Filter当请求发送到服务端后,会先经过中间件,之后会进入过滤器以上形成了.Net6的管道处理模型(洋葱模型)

weixin_43822956的博客 1491

webapi的几种过滤器

好久没有写博客了 今天就来聊聊asp.net webapi的过滤器们 过滤器主要有这么几种 AuthorizationFilterAttribute 权限验证 ActionFilterAttribute 日志 参数验证等 ExceptionFilterAttribute 异常处理捕获 我是如何使用这些过滤器的,最近在做项目中,这几种过滤器我都使用了,实现当别人调用接口的时候,首...

a713040869的博客 821

.net core mvc/webapi 过滤器(FilterAttribute)依赖注入方式

在.net core MVC和.net core webapi 项目中,通常需要加入过滤器FilterAttribute来处理一些接口权限、参数验证的问题。在过滤器我们需要用到系统已经注入的插件(类)等。过滤器的Controller中的方法上标注就会提示我们没有零个参数的构造器。怎么处理这个问题呢? 第一步:注入筛选器 public void ConfigureServices(IServ...

oopxiajun博客专栏 3620

Asp.NET Core WebAPI 入门学习笔记,超详细

WebAPI 是一种传统的方式,用于构建和暴露 RESTUI风格的Web服务。它提供了丰富的功能和灵活性,可以处理各种HTTP请求,并支持各种数据格式,如JSON、XML等。 WebAPI使用控制器(Controllers)和动作方法(ActionMethods)的概念、通过路由配置将请求映射到相应的方法上。 开发人员可以使用各种属性和过滤器来处理请求、控制访问权限、验证数据等。

夜飞鼠的专栏 1万+
上一篇: ASP.NET MVC BaseController
下一篇: .NET 关于文件分割与合并
_徐林
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值