300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > [水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API

[水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API

时间:2021-01-02 23:58:28

相关推荐

[水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API

问题

怎么样将 Web Api加入到现有的 MVC项目中

解决方案

在Visual Studio中就已经把 Web Api自动地整合到了MVC项目模板中。自 Visual Studio以后,创建 Web应用程序使用的是一种新的"One "项目向导,在这里可以选择相应的组件,例如,MVC,Web API,WebForm,等等。"One "是基于微软统一平台的概念。如图所示图1-1

图1-1. "One "项目向导,在一个项目中使用MVC和Web Api

有意思的是,如果你选择了Web API项目模板,MVC的复选框是自动被选中,因为 Web API Help Pages依赖于MVC 来提供内容。

你也可以在任何已经存在的MVC项目中他通过NuGet安装"Install-Package .WebApi"来添加Web API。

其实,上面两种,在 Web应用项目中,添加Web API的方式是等效的,因为项目向导也仅仅是从NuGet中安装了 Web API。

工作原理

Web API的构建围绕着一个叫做System.Web.IHttpAsyncHandler的异步HTTP Handler,如演示清单1-1.Handlers是的主干,就是一些可以拦截和处理发送给服务器的HTTP请求以及响应相应的请求给客户端的类。

清单1-1. IhttpAsyncHandler的定义

事实上,这个和 MVC框架的体系结构没有多大的不同,他也是位于Http Hander上层。其实,他们的框架都是软件工程中复杂的一部分,和常规的IHttpHandler或IHttpAsyncHandler没有什么特别之处,也许,以前你就创建过处理各种处理基于HTTP的工作。

Web API IHttpAsyncHandler的大致结构——HttpControllerHandler和他的公共成员,如清单1-2所示

清单 1-2. HttpControllerHandler 的公共成员

MVC和Web API的主要不同是从版本2开始的。Web API Handler-HttpControllerHandler,是HttpTaskAsyncHandler的一个子类。在MVC的版本中,MvcHandler,实现了接口IHttpAsyncHandler。HttpTaskAsyncHandler是在.NET 4.5才有的,而.NET 4.5是Web API 2才支持。

当在同一个进程中运行MVC和Web API的时候,使用的是HttpApplication。MapRequestHandler事件来决定哪个HTTP handler被翻牌子,来处理请求。在这个阶段,进行路由匹配,请求进入到相应匹配路由的IRouteHandler。IRouteHandler的唯一目的就是创建一个可以处理请求的IHttpHandler。

如果IRouteHandler是HttpControllerRouteHandler(Web API路由),那么,被选择的Web API地址路径的请求将被终结在HttpControllerRouteHandler。相反的,如果路由处理器是MvcRouteHandler,那么,MVC的地址路径由MvcHandler接管。

代码演示

这一部分要演示的是, MVC和 Web API将运行在在同一个进程中,他们可以轻而易举的共享状态,例如,静态对象或者Global.asax事件。另外,配置文件web.config对于两个框架也是通用的。

清单1-3展示了两个Controller,MVC Controller和 Web API Controller,他们可以在一个 Web应用程序共存。值得注意的是,因为他们在不同的命名空间中,所以他们设置可以使用相同的名称。此外,他们可以根据需要共享同一个model(DTO),非常完美。

清单 1-3. 简单的 MVC 和 Web API 控制器

避免两个框架冲突的关键是谨慎惊醒路由设置,为了方便,默认情况下, Web API将/api占位在URI下,这样,所有根级别的URL将被MVC处理。通常情况下,Web API路由是被定义在WebApiConfig静态类中,使用HttpConfiguration对象和他的Route属性。MVC的路由被定义在RouteConfig静态类中,直接使用System.Web.RouteCollection。两个框架路由的默认定义显示下,清单1-4.

清单1-4.Web API和MVC的默认路由

第三部分将专门介绍路由,如清单1-4所示,下面的地址是应用程序暴露出来的

/api/books/{id}路由到 Web API

/books/details/{id}路由到 MVC

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。