13个不可不知的ASP.NET MVC扩展点

.NET/C#汇总 —— ASP.NET MVC 这个引擎提供了数据绑定的显示模板。Partial view相当于传统⽹⻚表格中的user controls.它的主要⽬的是为了重复使⽤这些视图,他们⼀般被放在⼀个共享⽂件夹⾥⾯。HTTP是最常⽤的协议。过去的很多年,浏览器是我们使⽤HTTP⽅式公开数据的⾸选客户端。但是⽇新 ⽉异,客户端发展到多种形式。我们需要使⽤HTTP⽅式传递数据给不同的客户端,例如:移动⼿机、 Javascript,Windows应⽤等等。WebAPI是⼀个通过HTTP⽅式公开数据的技术,它跟随REST规则。 阅读详情

ASP.NET MVC设计的主要原则之一是可扩展性。处理管线(processing pipeline)上的所有(或大多数)东西都是可替换的。因此,如果您不喜欢ASP.NET MVC所使用的约定(或缺乏某些约定),您可以创建自己的服务来支持您的约定,并将其注入到主管线中。

在本文中,我们将从管线开始直到视图呈现,逐一向您展示每个ASP.NET MVC开发者都必须了解13个扩展点。

1.ASP.NET MVC扩展之RouteConstraint

通常情况下你可以使用正则表达式对url参数进行约束,但如果您的约束不仅仅取决于单一参数,您可以实现 IRouteConstrains的方法,并在其中添加你的验证逻辑。

比如对日期的验证,url中可能会包含年、月、日,而你需要验证这三者是否可以组合成一个有效的日期。

2.ASP.NET MVC扩展之RouteHandler

RouteHandler是在路由选择之后进行处理的组件,它并不仅仅针对ASP.NET MVC。显然,如果您改变了RouteHandler,那么对请求的处理将不再使用ASP.NET MVC,但这在您使用其他HttpHandler或经典的WebForm进行路由处理时却是非常有用的。

3.ASP.NET MVC扩展之ControllerFactory

ControllerFactory是基于路由的组件,它选择正确的controller并对其实例化。 default factory会查找实现了IController并且以Controller结尾的类,然后通过反射使用无参构造函数进行实例化。

但如果您希望使用依赖注入,就不能再使用default factory,而必须使用支持IoC的controller factory。MvcContrib和Ninject Controller Factory都包含支持IoC容器的controller factory。

4.ASP.NET MVC扩展之ActionInvoker

ActionInvoker顾名思义是负责调用(invoke)action的。默认的action invoker通过方法名、action名或其他可能的selector attribute来查找action,然后调用action方法以及定义的filter,最终执行得到action result。

你会发现大部分执行管线存在于ControllerActionInvoker类的逻辑之中。因此,如果希望改变这些约定,如action方法的选择逻辑、http参数映射到action参数的方式、选择和执行filter的方式等,您需要扩展该类并重写需要修改的方法。

可以参阅NinjectActionInvoker I developed to allow injection of dependencies inside filters。

5.ASP.NET MVC扩展之ActionMethodSelectorAttribute

使用默认的action invoker时,action的选择是基于名称的。您也可以实现自己的Method Selector以改善对于action的选择。在框架中已经包含了AcceptVerbs特性,它允许您指定使用哪一个HTTP Verb来处理action的响应。

例如,您也许会希望基于浏览器所支持的语言或浏览器类型(如移动设备的浏览器或桌面浏览器)来进行action 的选取。

6.ASP.NET MVC扩展之AuthorizationFilter

这种过滤器是在action执行之前执行的,用来确保请求是有效的。

框架中已经包含了一些autorization过滤器,最有名的莫过于Authorize特性,它用来检查当前用户是否允许执行该action。另一个是用来阻止CSRF攻击的ValidateAntiForgeryToken。如果您希望实现自己的 authorization,那么必须实现接口。例如,日期中的小时。

7.ASP.NET MVC扩展之ActionFilter

Action Filters在action执行前后执行。OutputCache过滤器是几个核心过滤器之一。这可能是您最有可能使用的扩展点,并且在我看来,controller只关心它的主要工作,而view所需要的所有其他数据都必须从action过滤器内部获取,这样的实现对于一个组织良好的 view来说,是十分关键的。

8.ASP.NET MVC扩展之ModelBinder

默认的model binder使用参数名称进行HTTP参数到action方法参数的映射。例如,http参数user.address.city将映射到方法参数 user的Address属性的City属性。DefaultModelBinder也同样适用于数组和其他列表类型。

更进一步来说,例如,您可能希望从数据库中进行检索,直接根据person的id将其转换为Person对象。 Timothy Khouri(网名SingingEels)在他的文章Model Binders in ASP.NET MVC中更好的阐述了这种方法。他的代码基于Preview 5,但其理念是一样的。

9.ASP.NET MVC扩展之ControllerBase

所有的Controller均继承自基类Controller。要想在action中封装自己的逻辑和约定,创 建自己的父类使所有Controller继承自该类,是一种很好的方式。

10.ASP.NET MVC扩展之ResultFilter

与ActionFilter类似,ResultFilters在ActionResult前后执行。 OutputCache过滤器也可以作为ResultFilter的示例。另外,比较常用的诠释这种过滤器的示例是日志记录。如果您希望在页面返回给用户时记录日志,可以编写自定义的RenderFilter,在ActionResult执行之后记录日志。

11.ASP.NET MVC扩展之ActionResult

ASP.NET MVC提供了很多result用来呈现视图、JSON、纯文本、文件并重定向到其他action。如果您需要其他类型的result,可以自定义 ActionResult,并实现ExecuteResult方法。例如,如果您希望将PDF文件作为结果发送,您需要使用PDF库编写能够生成PDF的 ActionResult。

12.ASP.NET MVC扩展之ViewEngine

您可能不需要编写自己的view engine,但您也许可以考虑使用其他引擎来替代默认的WebForm view engine。在我看来,最有趣的引擎就是Spark。

如果您确实希望编写自己的view engine,可以看一下Brad Wilson的文章: Partial Rendering & View Engines in ASP.NET MVC。

13.ASP.NET MVC扩展之HtmlHelper

视图必须十分简单整洁,它们只能包含html标记并调用HtmlHelper的辅助方法。视图中不能包含任何代 码,所以辅助方法必须十分方便,使您可以将代码从视图中提取出来,放到一个可测试的环境中去。正如Rob Conery所说:如果有if,就构造辅助方法(If there's an IF, make a Helper)。

什么是HtmlHelper辅助方法?其实就是HtmlHelper类的扩展方法,这是唯一的要求。

你可以从Rob的文章Avoiding Tag Soup中了解到为什么说HtmlHelper是封装视图中代码的好方法。

在您的应用中该使用哪个呢?

正如您所猜测的那样,并不是所有的应用都需要扩展以上的13个扩展点。最可能在所有应用中进行扩展的是 ActionFilter和HtmlHelper。另外,您很可能会使用其他人编写的扩展,如使用了IoC容器的ControllerFactory或用来摆脱WebForm的ViewEngine。

但是,学习这些扩展点并进行尝试是十分重要的,这样您才会做出选择,并随时准备在必要的时候使用这些强大的扩展 点。

ASP.NET MVC 13个核心扩展点详解:请求生命周期与实战避坑指南 ASP.NET MVC扩展点是框架请求处理管道中的关键钩子机制,其本质是基于HTTP生命周期的可插拔接口设计。理解它们需从MVC运行原理出发:请求经路由解析、控制器激活、模型绑定、Action执行、结果渲染等阶段,每个阶段暴露特定接口(如IAuthorizationFilter、IActionFilter、IModelBinder)供开发者注入逻辑。这些扩展点不仅支撑统一日志、权限控制、多租户隔离等企业级能力,更决定了代码的可维护性与性能边界。掌握其触发时机、线程上下文约束及执行顺序,是构建高可用Web应用 阅读详情

相关推荐

asp.net mvc5 安装

asp.net mvc5 安装

Hsuifengershi的专栏 1万+

【翻译】ASP.NET MVC中你必须知道的13个扩展点

ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我们简单介绍了ASP.NET MVC中的13个扩展点。Keyvan Nayyeri(与Simone合著了Beginning ASP.NET MVC 1.0一书)又陆续发表了一些文章,对这13个扩展点分别进行深入的...

weixin_34417200的博客 180

.NET8入门:13.ASP.NET Core MVC

ASP.NET Core MVC是一种十分经典的软件设计模式架构,接下来我们来了解一下MVC在ASP.NET8中的一些基础概念。

全干摸鱼ing... 1317

玩转Asp.net MVC 的八个扩展点

MVC模型以低耦合、可重用、可维护性高等众多优点已逐渐代替了WebForm模型。能够灵活使用MVC提供的扩展点可以达到事半功倍的效果,另一方面Asp.net MVC优秀的设计和高质量的代码也值得我们去阅读和学习。 本文将介绍Asp.net MVC中常用的八个扩展点并举例说明。 一、ActionResult ActionResult代表了每个Action的返回结果。asp.net mvc提供了...

weixin_33937913的博客 217

【AIGC】COT思维链:让AI学会拆解问题,像人一样思考

COT思维链的出现,为AI的发展开辟了一条新的道路。它让AI学会了像人类一样思考,将复杂问题分解成简单的步骤,并逐步推理出最终答案。希望我的引导会对你产生启发。

智兔唯新的博客 9002

xctf攻防世界 MISC高手进阶区 low

1. 进入环境,下载附件 给出的一张bmp图片,没有其他信息 2. 问题分析 扔进binwalk中,没有发现有用信息 使用zsteg,没有有用信息 塞入StegSolve中,发现有点猫腻,如图: 有点二维码的感觉,emmm,需要像素处理,但不知道如何下手,参考网上的wp,发现是让使用lsb隐写,copy代码: from PIL import Image img = Image.open('./pic/low.bmp') img_tmp = img.copy() pix = img_tmp.load()

l8947943的博客 1万+

【转】13个不可不知的ASP.NET MVC扩展点

ASP.NET MVC设计的主要原则之一是可扩展性。处理管线(processing pipeline)上的所有(或大多数)东西都是可替换的。因此,如果您不喜欢ASP.NET MVC所使用的约定(或缺乏某些约定),您可以创建自己的服务来支持您的约定,并将其注入到主管线中。在本文中,我们将从管线开始直到视 图呈现,逐一向您展示每个ASP.NET MVC开发者都必须了解13个扩展点。1.ASP.NET ...

weixin_30455365的博客 68

LabVIEW与MySQL实时数据存储:传感器采集与数据库同步实践

本文详细介绍了如何将LabVIEW与MySQL结合,实现传感器数据的实时采集与高效存储。通过设计合理的数据库表结构、配置LabVIEW数据库连接工具包,并编写核心的采集与存储VI,构建了稳定可靠的数据链路。文章重点分享了批量插入、连接管理、时间同步等关键优化技巧与避坑指南,帮助工程师应对工业监控、环境监测等场景下的实时数据同步挑战。

weixin_29281915的博客 262

一起谈.NET技术,13个不可不知的ASP.NET MVC扩展点

      ASP.NET MVC设计的主要原则之一是可扩展性。处理管线(processing pipeline)上的所有(或大多数)东西都是可替换的。因此,如果您不喜欢ASP.NET MVC所使用的约定(或缺乏某些约定),您可以创建自己的服务来支持您的约定,并将其注入到主管线中。   在本文中,我们将从管线开始直到视图呈现,逐一向您展示每个ASP.NET MVC开发者都必须了解13个扩展点。  ...

weixin_34232744的博客 115

量化实战:如何用Barra多因子模型给你的投资组合做一次‘风险体检’?

本文详细介绍了如何利用Barra多因子模型对投资组合进行全面的风险体检,帮助投资者识别行业和风格因子的风险暴露。通过实战案例和Python代码示例,展示了数据采集、风险归因和组合优化的完整流程,提升投资组合的风险调整收益。

weixin_27215337的博客 324

uniapp - 微信支付报错 requestPayment:fail:HBuilder mainifest.json中配置的支付appid和生成订单使用的appid不一致,如果是HB调试请在线打包

uni-app,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,微信支付,报错,errMsg,requestPayment:fail:HBuildermainifest.json中配置的支付appid和生成订单使用的appid不一致,如果是HB调试请在线打包,http://ask.dcloud.net.cn/article/282,已经都检查了还是报错,如何解决这个问题,还是不行,错误,苹果微信支付报错,安卓app微信支付出错,打包,在线打包也不行,本地打包,支

🏆 前端领域优质创作者 3501

ASP.NET MVC中你必须知道的13个扩展点[转]

ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我们简单介绍了ASP.NET MVC中的13个扩展点。Keyvan Nayyeri(

Roby sky 1221

一张微服务地图的十年演进:Spring Cloud 核心、扩展与工具组件的定位、原理与选型

本文把 Spring Cloud 当作一张微服务地图来读:先说明它是由 Commons 抽象层、实现层和 Boot 装配层构成的发行版,再沿一次请求梳理注册发现、负载均衡、声明式调用、容错限流、网关、配置、追踪与总线七类核心组件的原理与换代,并扩展到云平台、服务网格、消息流、批处理、安全与周边生态。仿真实测:默认参数下实例宕机平均 242 秒才被感知,优雅下线降到 47 秒;一个慢实例让轮询的 P99 达 49 秒,P2C 仅 203 毫秒。最后给出退场替代表、技术栈组合、升级路线和决策树。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 169万+

ASP.NET MVC 13个核心扩展点实战指南

ASP.NET MVC扩展点是框架可定制性的技术基石,其本质是基于请求生命周期的松耦合钩子机制。通过路由约束、控制器工厂、模型绑定器、授权过滤器等标准接口,开发者能在不修改框架源码的前提下,深度介入URL匹配、对象创建、权限控制、视图渲染等关键环节。这类扩展能力直接支撑动态权限、多租户隔离、智能参数绑定、API版本路由等企业级需求,广泛应用于金融、政务、电商等对灵活性与可控性要求极高的系统。本文聚焦13个真实项目高频使用的扩展点,结合DI集成、执行顺序、性能陷阱等工程细节,提供开箱即用的可复用实现。

baochuanying9531的博客 544

PyTorch实战(14)——图注意力网络(Graph Attention Network,GAT)

本节介绍了图注意力网络 (Graph Attention Network, GAT) 在节点分类任务中的应用。相比图卷积网络 (GCN) 的平均聚合机制,GAT 通过引入注意力机制,能够为不同邻居节点分配差异化权重,从而更精准地捕捉图结构信息。实验表明,GAT 在 CiteSeer 数据集上的分类准确率达到 71.1%,较 GCN 提升 2.5 个百分点。可视化结果显示,GAT 学习到的节点表征具有更好的类别区分度。这验证了注意力机制在图数据建模中的有效性,为处理复杂图结构任务提供了更优解决方案。

盼小辉丶的博客 3585

Python爬虫实战:基于最新技术栈的政府招标采购数据抓取与分析

对于企业、研究人员和数据分析师来说,能够高效地获取这些数据意味着可以获得宝贵的商业洞察和市场先机。随着反爬技术的不断升级和网站结构的日益复杂,传统的爬虫方法已经难以满足需求。我们将采用Selenium、Playwright等现代浏览器自动化工具,结合Scrapy框架和异步请求库,构建一个能够应对各种反爬措施的强大爬虫系统。Playwright是微软开发的浏览器自动化工具,支持Chromium、WebKit和Firefox,比Selenium更快速、更稳定。

2201_76125261的博客 1312

asp.net mvc 学习总结

自学MVC看这里——全网最全ASP.NET MVC 教程汇总 http://www.cnblogs.com/powertoolsteam/archive/2015/08/13/4667892.html MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC。小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口。本文从Why,What,How三个角度整理MVC 的学习资源,让学习者第一时间找到最有价值的文章,获取最彻底的ASp

Tusk_Act4的博客 2599

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ASP.NET MVC中你必须知道的13个扩展点

ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我们简单介绍了ASP.NET MVC中的13个扩展点。Keyvan Nayyeri(与Simone合著了Beginning ASP.NET MVC 1.0一书)又陆续发表了一些文章,对这13个扩展点分别进

我生活的点滴 1132

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ASP.NET MVC 13个核心扩展点实战指南:管道机制与生命周期干预

ASP.NET MVC的请求处理本质上是一条有序执行的管道,其扩展能力围绕模型绑定、授权校验、动作过滤、结果渲染、异常捕获等基础Web开发概念展开。理解IModelBinder如何将HTTP参数转为强类型对象、IAuthorizationFilter如何实现动态权限决策、IActionFilter如何安全钩住执行前后时机,是构建可维护、可监控、可灰度系统的前提。这些扩展点并非孤立接口,而是嵌套在MVC生命周期中的关键干预锚点,直接影响日志统一性、响应安全性、时区一致性与异常降级能力。本文聚焦真实生产场景下的

天下无双 503

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: ASP.NET MVC 入门 -- 11、使用AJAX
DiscussQuestions
博客等级 码龄19年 28粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值