本人已履行网站备案信息,网站上的图标用什么软件做的,网站系统建设费用,wordpress上传漏洞问题 怎么样将 Asp.Net Web Api 加入到现有的 Asp.Net MVC 项目中 解决方案 在 Visual Studio 2012 中就已经把 Asp.Net Web Api 自动地整合到了 MVC 项目模板中。自 Visual Studio 2013 以后#xff0c;创建 ASP.Net Web应用程序使用的是一种新的One ASP.NET项目…问题 怎么样将 Asp.Net Web Api 加入到现有的 Asp.Net MVC 项目中 解决方案 在 Visual Studio 2012 中就已经把 Asp.Net Web Api 自动地整合到了 MVC 项目模板中。自 Visual Studio 2013 以后创建 ASP.Net Web应用程序使用的是一种新的One ASP.NET项目向导在这里可以选择相应的组件例如MVCWeb API,WebForm,等等。One ASP.NET 是基于微软统一 ASP.NET平台的概念。如图所示 图1-1 图1-1. One ASP.NET 项目向导在一个项目中使用 MVC 和 Web Api 有意思的是如果你选择了 Web API 项目模板MVC 的复选框是自动被选中因为ASP.NET Web API Help Pages 依赖于 MVC 来提供内容。 你也可以在任何已经存在的 MVC 项目中他通过 NuGet 安装Install-Package Microsofty.Asp.Net.WebApi来添加 Web API。 其实上面两种在 ASP.NET Web 应用项目中添加 Web API 的方式是等效的因为项目向导也仅仅是从NuGet 中安装了 ASP.NET Web API。 工作原理 ASP.NET Web API 的构建围绕着一个叫做 System.Web.IHttpAsyncHandler 的异步 HTTP Handler如演示清单1-1.Handlers 是 ASP.NET 的主干就是一些可以拦截和处理发送给服务器的 HTTP 请求以及响应相应的请求给客户端的类。 清单 1-1. IhttpAsyncHandler 的定义 1 2 3 4 5 6 public interface IHttpAsyncHandler : object, IHttpHandler { System.IAsyncResult BeginProcessRequest(HttpContext context, System.AsyncCallback cb, object extraData); void EndProcessRequest(System.IAsyncResult result); } 事实上这个和 ASP.NET MVC 框架的体系结构没有多大的不同他也是位于 Http Hander 上层。其实他们的框架都是软件工程中复杂的一部分和常规的 IHttpHandler 或 IHttpAsyncHandler 没有什么特别之处也许以前你就创建过处理各种处理基于 HTTP 的工作。 Web API IHttpAsyncHandler 的大致结构——HttpControllerHandler 和他的公共成员如清单1-2所示 清单 1-2. HttpControllerHandler 的公共成员 1 2 3 4 5 6 public class HttpControllerHandler : HttpTaskAsyncHandler { public HttpControllerHandler(RouteData routeData); public HttpControllerHandler(RouteData routeData, HttpMessageHandler handler); public override Task ProcessRequestAsync(HttpContext context); } MVC 和 Web API 的主要不同是从版本2开始的。Web API Handler-HttpControllerHandler是HttpTaskAsyncHandler 的一个子类。在 MVC 的版本中MvcHandler实现了接口IHttpAsyncHandler。HttpTaskAsyncHandler是在 .NET 4.5 才有的而 .NET 4.5 是 Web API 2 才支持。 当在同一个 ASP.NET 进程中运行 MVC 和 Web API 的时候ASP.NET 使用的是HttpApplication。MapRequestHandler事件来决定哪个 HTTP handler 被翻牌子来处理请求。在这个阶段进行路由匹配请求进入到相应匹配路由的 IRouteHandler。IRouteHandler 的唯一目的就是创建一个可以处理请求的 IHttpHandler。 如果 IRouteHandler 是 HttpControllerRouteHandlerWeb API 路由那么被选择的 Web API 地址路径的请求将被终结在 HttpControllerRouteHandler。相反的如果路由处理器是 MvcRouteHandler那么MVC 的地址路径由 MvcHandler 接管。 代码演示 这一部分要演示的是ASP.NET MVC 和ASP.NET Web API 将运行在在同一个进程中他们可以轻而易举的共享状态例如静态对象或者 Global.asax 事件。另外配置文件 web.config 对于两个框架也是通用的。 清单 1-3 展示了两个ControllerMVC Controller 和 ASP.NET Web API Controller他们可以在一个ASP.NET Web 应用程序共存。值得注意的是因为他们在不同的命名空间中所以他们设置可以使用相同的名称。此外他们可以根据需要共享同一个 modelDTO非常完美。 清单 1-3. 简单的 MVC 和 Web API 控制器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 public class Book { public int Id { get; set; } public string Author { get; set; } public string Title { get; set; } public string Link { get; set; } } Namespace WebApplication.Controllers.Mvc { public class BooksController : Controller { public ActionResult Details(int id) { var book Books.List.FirstOrDefault(x x.Id id); if(book null) return new HttpNotFoundResult(); return View(book); } } } namespace WebApplication.Controllers.WebApi { public class BooksController : ApiController { public Book GetById(int id) { var book Books.List.FirstOrDefault(x x.Id id); if (book null) throw new HttpResponseException(HttpStatusCode.NotFound); return book; } } } 避免两个框架冲突的关键是谨慎惊醒路由设置为了方便默认情况下 ASP.NET Web API 将 /api 占位在 URI 下这样所有根级别的 URL 将被 MVC 处理。通常情况下Web API 路由是被定义在 WebApiConfig静态类中使用 HttpConfiguration 对象和他的 Route 属性。MVC 的路由被定义在 RouteConfig 静态类中直接使用 System.Web.RouteCollection。两个框架路由的默认定义显示下清单 1-4. 清单 1-4. Web API 和 MVC 的默认路由 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 //Web API 路由配置 public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 配置和服务 // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: DefaultApi, routeTemplate: api/{controller}/{id}, defaults: new { id RouteParameter.Optional } ); } } //MVC 路由配置 public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute({resource}.axd/{*pathInfo}); routes.MapRoute( name: Default, url: {controller}/{action}/{id}, defaults: new { controller Home, action Index, id UrlParameter.Optional } ); } } 第三部分将专门介绍路由如清单1-4所示下面的地址是 ASP.NET 应用程序暴露出来的 /api/books/{id} 路由到 ASP.NET Web API /books/details/{id} 路由到 ASP.NET MVC 转载于:https://www.cnblogs.com/shuizhucode/p/6022665.html