惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Securelist
O
OpenAI News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Google Online Security Blog
Google Online Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
N
News and Events Feed by Topic
S
Security Affairs
SecWiki News
SecWiki News
Project Zero
Project Zero
L
Lohrmann on Cybersecurity
P
Proofpoint News Feed
P
Palo Alto Networks Blog
L
LINUX DO - 最新话题
H
Hacker News: Front Page
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
Intezer
Simon Willison's Weblog
Simon Willison's Weblog
W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
K
Kaspersky official blog
The GitHub Blog
The GitHub Blog
I
InfoQ
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
B
Blog
IT之家
IT之家
AWS News Blog
AWS News Blog
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Google DeepMind News
Google DeepMind News
Spread Privacy
Spread Privacy
N
News and Events Feed by Topic
Security Latest
Security Latest
美团技术团队
C
Check Point Blog
WordPress大学
WordPress大学
T
Tenable Blog
S
Security @ Cisco Blogs
Last Week in AI
Last Week in AI
博客园 - 聂微东
月光博客
月光博客
博客园 - 【当耐特】
S
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Secure Thoughts
Schneier on Security
Schneier on Security
C
Cisco Blogs
Cyberwarzone
Cyberwarzone

博客园 - 大熊(BigBear)

ADO.net实现批量SQL操作. - 大熊(BigBear) - 博客园 Application_AcquireRequestState事件,导致Ajax客户端不能加载 CSLA.Net在Web项目中使用SQL2005的分页 Moss中Form验证中"找不到匹配项"问题的处理 对于知识库系统建设的思考 知识管理中知识地图详解〔转〕 知识管理中的一些概念 Aop面向方面编程之PostSharp框架 [摘]IIS上部署WCF的问题 Linq使用之分组 Silverlight表格绑定中的一点细节处理 - 大熊(BigBear) 页面加载性能的优化 由一棵树绑定引发的遐想 IBatis.Net使用MemCached替换内置缓存策略 .Net下调用Java安全Web服务 Webpart深入(二) Webpart深入(一) ASP.NET MVC 中文文档2 ASP.net MVC 中文文档1
ASP.NET MVC 中文文档3
大熊(BigBear) · 2008-11-02 · via 博客园 - 大熊(BigBear)

理解MVC 的执行过程

介绍

请求一个基于ASP.NET MVCWEB应用首先要通过UrlRoutingModule 对象, 它是一个 HTTP module. 这个module解析请求并执行路由选择. UrlRoutingModule对象选择匹配当前请求的第一个路由对象. (路由对象实现RouteBase, 通常是 Route 类的实例.) 如果没有匹配的路由, UrlRoutingModule什么也不做, 然后让请求后退到常规的ASP.NET IIS 请求过程.

从选择的Route对象中, UrlRoutingModule获得了与Route 相关联的 IRouteHandler 对象. 典型的,在一个MVC 程序, 这是一个MvcRouteHandler实例. IRouteHandler 实例创建IHttpHandler 对象, 并传给他一个IHttpContext 对象. 默认的, IhttpHandler实例MvcHandler 对象. 然后MvcHandler 对象选择controller来决定如何处理请求. 更多信息, URL Routing with MVC.

Note: ASP.NET MVC Web运行在 IIS 7.0,不需要使用文件名扩展. 然而, IIS 6.0, handler需要通过映射 .mvc文件名扩展到 ASP.NET ISAPI DLL.

modulehandler ASP.NET MVC框架的入口点. 他们执行以下动作:

选择适当的controller.

获取指定的controller 实例.

调用controllerExecute方法.

下表列出了MVC Web 项目的执行阶段.

阶段

详细信息

接到应用的第一个请求

Global.asax 文件, Route对象被添加到了RouteTable 对象中.

执行路由

UrlRoutingModule module使用RouteTable集合中第一个匹配的 Route 对象来创建RouteData ,它将被用于创建 RequestContext (IHttpContext) 对象.

创建MVC 请求handler

MvcRouteHandler创建MvcHandler类的实例并传递给RequestContext 实例.

创建controller

MvcHandler使用RequestContext实例来识别 IControllerFactory 对象 (典型的是DefaultControllerFactory类的实例) ,并使用工厂对象创建 controller的实例.

执行controller

MvcHandler 实例调用controllerExecute 方法.

调用action

大多数controllers继承Controller 基类.controller关联的 ControllerActionInvoker 对象决定controller中的哪个方法应该被调用, 然后真的调用它.

执行结果

一个典型的action方法可能接收用户输入, 准备合适的返回数据, 然后通过result type返回结果. 内置的result types 如下: ViewResult (渲染一个视图,最常用的), RedirectToRouteResult, RedirectResult, ContentResult, JsonResult, 以及 EmptyResult.

理解MVC 中的Model

介绍

ASP.NET MVC, model是负责核心逻辑的部分. Model常用来从持久存储器访问数据, SQL Server, 在数据上执行business logic. Models是程序指定的, 因而 ASP.NET MVC model对象的类型没有约束. 比如, 你可以用ADO.NET System.Data.DataSet DataReader 对象 也可以使用自己的域对象. 你也可以组合使用来操作数据.

model没有指定类或接口. Model类不依赖于实现接口或继承自特定的类. 相反, 类是model的一部份. 是因为类在ASP.NET MVC扮演的角色, 和在程序架构中的位置. 一个model类不会直接处理从浏览器来的输入, 也不会生成HTML输出到浏览器.

定义Model

Model 对象是程序中实现域逻辑的部分, 也被当成business logic. Domain logic 处理 database UI之间的信息. 例如, 在一个库存系统, 模型跟踪货物的库存. 也包含决定库存在哪里的逻辑. 另外, model负责更新数据库,当货物卖出或者运出仓库时. Model也能在数据库中存放和检索状态.

ModelController结合

ASP.NET MVC 中提供的Models子目录是一个方便存放模型类的地方. 把模型作为一个单独类库也很普遍, 那样更便于重用.controller中使用model类通常要在方法中实例化他们, 调用模型对象的方法, 从中解析出数据显示到视图中. 这是实现actions时被推荐的方式. 同时也保持了分离, 这让测试程序逻辑更加容易,而且不用通过接口.

ASP.NET MVC 路由

介绍

ASP.NET MVC使用ASP.NET路由来映射URLscontroller类和actions. ASP.NET路由会根据你定义的模式解析URL中的变量, 并自动将变量传递到controller action作为参数. 这个主题介绍如何使用 MVC路由. 关于如何定义路由动态构造URLs, ASP.NET Routing.

添加路由到MVC

RouteCollection类的Add 方法是用来添加路由的.另外, MVC提供 MapRoute 方法和 IgnoreRoute 方法添加路由. 这些方法是 RouteCollection 类的扩展方法; MVC 外是不能调用的.

MapRoute 方法有单一的语法添加路由,因为在你添加 RouteCollection 对象之前不需要创建一个新的 Route 对象. 相反, 你要指定你要添加的 Route 对象, MapRoute 方法将为你创建 Route 实例.

IgnoreRoute方法允许你在被路由处理时执行特定的请求. 任何通过 IgnoreRoute方法添加的路由将被 StopRouteHandler 类处理. StopRouteHandler 阻止了请求中附加的处理过程, 让请求失败以通过 ASP.NET 终点处理过程.

默认路由

Visual Studio 项目模板 ASP.NET MVC 包含预配置URL路由. 这些定义在ASP.NET Application 类在Global.asax 文件.

路由的预配置让你ASP.NET MVC程序可以不需要更多配置路由, 在大多数场景下.下面是默认的路由.

Code


路由模式 {resource}.axd/{*pathInfo} 阻止请求WEB资源如WebResource.axd ScriptResource.axd 让他们不被传递给controller.

下表是默认路由模式.

IIS 7.0, 不需要文件名扩展. IIS 6.0, 你需要包含 .mvc 文件名扩展,在 URL pattern, 如下:{controller}.mvc/{action}/{id}

映射URLsControllerAction

一个URL请求通过 UrlRoutingModule对象路由, 然后通过 MvcHandler HTTP handler. MvcHandler HTTP handler 决定调用哪个 controller和那个action方法.

MVC URL片段加到 "Controller"前面,来确定处理请求的controller的类名. 例如, 有个URL包含URL路径 /Products,那么它对应的controller名字就是 ProductsController. Action参数位置的值就是对应的action方法的名字. 一个URL包含URL路径 /Products/show 将最终调用ProductsController 类中的Show方法.

最简单的实现一个 controller方法就是创建一个继承 System.Web.Mvc.Controller的类并让它的名字以 "Controller"结尾. 然后你可以添加公共的方法到controller类让默认的路由处理,调用对应的方法. 如果你按这个方式, 就可以依赖MVC来进行路由.