加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_商丘站长网 (https://www.0370zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

ASP 实例 [水煮 ASP.NET Web API2 方法论](1

发布时间:2022-09-14 12:53:22 所属栏目:Asp教程 来源:
导读:  [水煮 ASP.NET Web API2 方法论](1-4)从 MVC Controller 链接到 API Controller 以及反向链接

  本文讲解"[水煮 ASP.NET Web API2 方法论](1-4)从 MVC Controller 链接到 API Controller 以及反向链接
  [水煮 ASP.NET Web API2 方法论](1-4)从 MVC Controller 链接到 API Controller 以及反向链接
 
  本文讲解"[水煮 ASP.NET Web API2 方法论](1-4)从 MVC Controller 链接到 API Controller 以及反向链接",用于解决相关问题。
 
  问题
 
  想创建一个从 ASP.NETMVC controller 到 ASP.NET Web API controller 的直接链接,或者反向链接。
 
  解决方案
 
  可以使用 System.Web.Http.Routing.UrlHelp 的实例来创建一个指向 Controller的链接,来暴露 ApiController(作为 Url 属性)。着和在 RequestContext 上一样,会被附加到 HttpRequestMessage 实例。为了达到这个目的,我们需要调用链接方法或路由方法,然后传入 MVC 路由的名称和默认路由(Controller 名字,Action名字,以及 Action 相关的参数)。
 
  在 MVC Controller 这边,System.Web.Mvc.UrlHelp,挂在基础 MVC 基础 Controller类,可以通过 HttpRouteUrl 生成 Web API 链接
 
  工作原理
 
  当使用 ASP.NET Web API 作为现有 MVC 应用程序一部分的时候,有一种很常见的需求,就是在两种类型的 Controller 之间可以互相链接。当我们从 Web API 上创建一个到MVC Controller 的链接的时候,实际上使用的方法和创建两个 Web API Controller 之间链接的方法完全相同:UrlHelper 中的链接或者路由。链接和路由生成的链接还是有一些区别的,
 
  反过来,我们从 MVC 链接到 Web API的时候,HttpRouteUrl 并不是 ASP.NET Web API 程序集的扩展方法,而是 UrlHelper 类的成员,在System.Web.Mvc 中。这个 Helper 使用了一个私有的常量叫做 httproute,每次使用 HttpRouteUrl 的时候,他都会被添加到 RouteValueDictionray 中。
 
  注意 我们将会在 3-12 的时候深入学习和理解引擎生成链接到路由背后的故事。
 
  代码演示
 
  假设一个简单的关于书籍的 Web 应用程序。如清单 1-10 所示的简单的 Book 模型,存储使用的是内存ASP 实例, 配置了API/MVC 路由。这个例子的目的是,在 Web API 和 MVC 控制器之间,完美的使用同一个模型。我们将使用在这个清单中的伪数据来说明 Web API 和 MVC 之间互相链接的情况。
 
  清单 1-10. 模型案例,路由和内存存储
 
  public?class?Book?{
  ?????public?int?Id?{?get;?set;?}
  ?????public?string?Author?{?get;?set;?}
  ?????public?string?Title?{?get;?set;?}
  ?????public?string?Link?{?get;?set;?}
  ?}
  ?
  ?public?static?class?Books?{
  ?????public?static?List?List?=?new?List?????{
  ?????????new?Book?{Id?=?1,?Author?=?"John?Robb",?Title?=?"Punk?Rock:?An?Oral?History"},
  ?????????new?Book?????????{
  ?????????????Id?=?2,
  ?????????????Author?=?"Daniel?Mohl",
  ?????????????Title?=?"Building?Web,?Cloud,?and?Mobile?Solutions?with?F#"?????????},
  ?????????new?Book?????????{
  ?????????????Id?=?3,
  ?????????????Author?=?"Steve?Clarke",
  ?????????????Title?=?"100?Things?Blue?Jays?Fans?Should?Know?&?Do?Before?They?Die"?????????},
  ?????????new?Book?????????{
  ?????????????Id?=?4,
  ?????????????Author?=?"Mark?Frank",
  ?????????????Title?=?"Cuban?Revelations:?Behind?the?Scenes?in?Havana?"?????????}
  ?????};
  ?}
  ?
  ?????public?class?RouteConfig?????{
  ?????????public?static?void?RegisterRoutes(RouteCollection?routes)
  ?????????{
  ?????????????routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  ?????????????routes.MapRoute(
  ?????????????????name:?"BookPage",
  ?????????????????url:?"books/details/{id}",
  ?????????????????defaults:?new?{controller?=?"BooksPage",?action?=?"Details"}
  ?????????????????);
  ?????????}
  ?????}
  ?
  ?????public?static?class?WebApiConfig?????{
  ?????????public?static?void?Register(HttpConfiguration?config)
  ?????????{
  ?????????????config.Routes.MapHttpRoute(
  ?????????????????name:?"DefaultApi",
  ?????????????????routeTemplate:?"api/{controller}/{id}",
  ?????????????????defaults:?new?{id?=?RouteParameter.Optional}
  ?????????????????);
  ?????????}
  ?????}
  如清单 1-11 所示,这段代码是为了创建一个从 Web API 到 MVC Controller 的链接。BooksPageController 负责处理书籍。为了生成链接,我们可以调用 UrlHelper 的链接方法,然后传相关路由的值。
 
  清单 1-11 ASP.NET Web APIApiController 链接到 MVC Controller
 
  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);
  ????????book.Link?=?Url.Link("BookPage",?new?{controller?=?"BooksPage",?action?=?"Details",?id});
  ????????return?book;
  ????}
  反方向的链接,如清单 1-12 所示,从 MVC Controller 到 ApiController。在这样的情况下,使用一个 MVC 特定的方法-UrlHelper,他是由 HttpRouteUrl 扩展的方法。
 
  清单 1-12. 从 MVC Controller 链接到ASP.NET Web API
 
  public?class?BooksPageController?:?Controller{
  ????public?ActionResult?Details(int?id)
  ????{
  ????????var?book?=?Books.List.FirstOrDefault(x?=>?x.Id?==?id);
  ????????if?(book?==?null)?return?new?HttpNotFoundResult();
  ????????book.Link?=?Url.HttpRouteUrl("DefaultApi",?new?{controller?=?"Books",?id});
  ????????return?View(book);
  ????}
  }
  关于 "[水煮 ASP.NET Web API2 方法论](1-4)从 MVC Controller 链接到 API Controller 以及反向链接" 就介绍到此。希望多多支持编程宝库。
 
  下一节:[水煮 ASP.NET Web API2 方法论](1-5)ASP.NET Web API Scaffolding(模板)编程技术 和 程序设计
 

(编辑:开发网_商丘站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!