真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

[水煮ASP.NETWebAPI2方法論](1-4)從MVCController鏈接到APIController以及反向鏈接

問題

在常熟等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需策劃設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都全網(wǎng)營(yíng)銷,外貿(mào)網(wǎng)站制作,常熟網(wǎng)站建設(shè)費(fèi)用合理。

  想創(chuàng)建一個(gè)從 ASP.NET MVCcontroller到 ASP.NET Web API controller的直接鏈接,或者反向鏈接。

 

解決方案

  可以使用System.Web.Http.Routing.UrlHelp的實(shí)例來創(chuàng)建一個(gè)指向Controller的鏈接,來暴露 ApiController(作為 Url屬性)。著和在 RequestContext上一樣,會(huì)被附加到 HttpRequestMessage實(shí)例。為了達(dá)到這個(gè)目的,我們需要調(diào)用鏈接方法或路由方法,然后傳入 MVC路由的名稱和默認(rèn)路由(Controller名字,Action名字,以及 Action相關(guān)的參數(shù))。

在MVC Controller這邊,System.Web.Mvc.UrlHelp,掛在基礎(chǔ) MVC基礎(chǔ) Controller類,可以通過 HttpRouteUrl生成 Web API鏈接

工作原理

當(dāng)使用 ASP.NETWeb API作為現(xiàn)有 MVC應(yīng)用程序一部分的時(shí)候,有一種很常見的需求,就是在兩種類型的 Controller之間可以互相鏈接。當(dāng)我們從 Web API上創(chuàng)建一個(gè)到MVC Controller的鏈接的時(shí)候,實(shí)際上使用的方法和創(chuàng)建兩個(gè) Web API Controller之間鏈接的方法完全相同:UrlHelper中的鏈接或者路由。鏈接和路由生成的鏈接還是有一些區(qū)別的,

  • 鏈接方法將會(huì)生成一個(gè)絕對(duì)鏈接

  • 路由方法生成的是一個(gè)相對(duì)鏈接。

反過來,我們從MVC鏈接到 Web API的時(shí)候,HttpRouteUrl并不是 ASP.NET Web API程序集的擴(kuò)展方法,而是 UrlHelper類的成員,在System.Web.Mvc中。這個(gè) Helper使用了一個(gè)私有的常量叫做 httproute,每次使用 HttpRouteUrl的時(shí)候,他都會(huì)被添加到 RouteValueDictionray中。

 

注意我們將會(huì)在3-12的時(shí)候深入學(xué)習(xí)和理解引擎生成鏈接到路由背后的故事。

 

代碼演示

假設(shè)一個(gè)簡(jiǎn)單的關(guān)于書籍的Web應(yīng)用程序。如清單 1-10所示的簡(jiǎn)單的 Book模型,存儲(chǔ)使用的是內(nèi)存,配置了API/MVC路由。這個(gè)例子的目的是,在 Web API和 MVC控制器之間,完美的使用同一個(gè)模型。我們將使用在這個(gè)清單中的偽數(shù)據(jù)來說明 Web API和 MVC之間互相鏈接的情況。

 

清單 1-10. 模型案例,路由和內(nèi)存存儲(chǔ)

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所示,這段代碼是為了創(chuàng)建一個(gè)從Web API到 MVC Controller的鏈接。BooksPageController負(fù)責(zé)處理書籍。為了生成鏈接,我們可以調(diào)用 UrlHelper的鏈接方法,然后傳相關(guān)路由的值。

 

清單 1-11 ASP.NET Web API ApiController 鏈接到 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。在這樣的情況下,使用一個(gè) MVC特定的方法-UrlHelper,他是由 HttpRouteUrl擴(kuò)展的方法。

 

清單 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.NETWebAPI2方法論](1-4)從MVCController鏈接到APIController以及反向鏈接
網(wǎng)站鏈接:http://weahome.cn/article/pspisg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部