建立在迷你版 ASPNET MVC上的Web应用
在正式介绍我们自己创建的迷你版ASPNET MVC的实现原理之前不妨来看看建立在该框架之上的Web应用如何定义通过Visual Studio创建一个空的ASPNET Web应用(注意不是ASPNET MVC应用)并不会引用SystemWebMvcdll这个程序集所以在接下来的程序中看到的所谓MVC的组件都是我们自行定义的
首先定义了如下一个SimpleModel类型它表示最终需要绑定到View上的数据为了验证针对Controller和Action的解析机制SimpleModel定义的两个属性分别表示当前请求的目标Controller和Action
public class SimpleModel
{
public string Controller { get; set; }
public string Action { get; set; }
}
与真正的ASP NET MVC应用开发一样我们需要定义Controller类按照约定的命名方式(以字符Controller作为后缀)我们定义了如下一个HomeControllerHomeController实现的抽象类型ControllerBase是我们自行定义的以自定义的ActionResult作为返回类型的Index方法表示Controller的Action它接受一个SimpleModel类型的对象作为参数该Action方法返回的ActionResult是一个RawContextResult对象顾名思义RawContextResult就是将指定的内容进行原样返回在这里我们将作为参数的SimpleModel对象的Controller和Action属性显示出来
public class HomeController: ControllerBase
{
public ActionResult Index(SimpleModel model)
{
string content = stringFormat(Controller: {}<br/>Action:{}
modelController modelAction)
return new RawContentResult(content)
}
}
ASPNET MVC根据请求地址来解析出用于处理该请求的Controller的类型和Action方法名称具体来说我们预注册一些包含Controller和Action名称作为占位符的(相对)地址模板如果请求地址符合相应地址模板的模式Controller和Action名称就可以正确地解析出来和ASPNET MVC应用类似我们在Globalasax中注册了如下一个地址模板({controller}/{action})我们还注册了一个用于创建Controller对象的工厂RouteTableControllerBuilder和DefaultControllerFactory都是我们自定义的类型
public class Global : SystemWebHttpApplication
{
protected void Application_Start(object sender EventArgs e)
{
RouteTableRoutesAdd(default
new Route{Url = {controller}/{action}})
ControllerBuilderCurrentSetControllerFactory(
new DefaultControllerFactory())
}
}
正如上面所说的ASPNET MVC是通过一个自定义的HttpModule实现的在这个迷你版ASPNET MVC框架中我们也将其起名为UrlRoutingModule在运行Web应用之前我们需要通过配置对该自定义HttpModule进行注册下面是相关的配置
<configuration>
<systemwebServer>
<modules>
<add name=UrlRoutingModule
type=WebAppUrlRoutingModule WebApp/>
</modules>
</systemwebServer>
</configuration>
到目前为止所有的编程和配置工作已经完成为了让定义在HomeController中的Action方法Index来处理针对该Web应用的访问请求我们需要指定与之匹配的地址(符合定义在注册地址模板的URL模式)如图所示由于在浏览器中输入地址(http://…/Home/Index)正好对应着HomeController的Action方法Index所以对应的方法会被执行而执行的结果就是将当前请求的目标Controller和Action的名称显示出来(S)
图 采用符合注册的路由地址模板的地址访问Web应用
上面演示了如何在我们自己创建的迷你版ASPNET MVC框架中创建一个Web应用从中可以看到和创建一个真正的ASPNET MVC应用别无二致接下来我们就来逐步地分析这个自定义的ASPNET MVC框架是如何建立起来的而它也代表了真正的ASPNET MVC框架的工作原理
返回目录ASPNET MVC 框架揭秘
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
Java程序性能优化让你的Java程序更快更稳定
Visual C++音频/视频技术开发与实战