溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

[水煮 ASP.NET Web API2 方法論](1-2)在 WebForm 應(yīng)用程序中添加 ASP.NET Web API

發(fā)布時間:2020-06-22 18:12:02 來源:網(wǎng)絡(luò) 閱讀:679 作者:水煮code 欄目:編程語言

問題

  怎么樣將 Asp.Net Web Api 加入到 Asp.Net Web From 應(yīng)用程序中

 

解決方案

  Visual Studio 2013 中,創(chuàng)建新的 Web From,可以直接在"新建 ASP.NET 項目" 創(chuàng)建項目向?qū)е?,勾選 ASP.NET Web API ,將其加入進(jìn)來。如圖 1-2 所示。

 

 [水煮 ASP.NET Web API2 方法論](1-2)在 WebForm  應(yīng)用程序中添加 ASP.NET Web API

 

圖 1-2. Asp.NET 項目向?qū)В?/span>同時選中 Web Form Web API

 

  因為可以通過 NuGet 添加 ASP.NET Web API ,所以使用“Install-Package Microsoft.AspNet.WebApi”就可以輕易將其添加到現(xiàn)有的 Web Form 解決方案中。

  Visual Studio 2012 中使用也很簡單,只要創(chuàng)建一個 WebForm 項目,然后通過NuGet 來安裝 Web API 就可以。

 

工作原理

和在 MVC 中使用 ASP.NET Web API 一樣,在 Web Form 項目中ASP.NET Web API 使用 的結(jié)果就是,Web API Web Form 應(yīng)用程序運行在同一個 ASP.NET 進(jìn)程中。

  ASP.NET 項目中安裝 Microsoft.AspNet.WebApi NuGet 包時,會在 App_Start文件夾中添加  WebApiConfig 靜態(tài)類。這個文件是用來配置 ASP.NET Web API 和定義 ASP.NET Web API 路由。

  另外,在 Global.asax 中的 Application_Start 可以找到被添加的代碼,就像下面的代碼片段,調(diào)用 Web API 配置。

GlobalConfiguration.Configure(WebApiConfig.Register);

 

  Web API 運行在  Web Form 應(yīng)用程序中與 運行在 MVC 應(yīng)用程序中沒什么不同。每個請求仍將被相關(guān)的 IHttpHandler 處理??赡苁怯糜谔幚?/span> Web API HttpControllerHandler 或者是用于處理 Web Form 的處理器。Web Form 相關(guān)的 ASPX 擴(kuò)展名會交給 PageHandlerFactory,依次調(diào)用相關(guān)的 IHttpHandler 來處理 HTTP 請求。System.Web.UI.Page 類是 Web Form 應(yīng)用程序的默認(rèn)組成部分,也是一個 IHttpHandler,其實他才是請求處理器的真正執(zhí)行者。

 

代碼演示

清單 1-5 展示了一個簡單的模型類,這個模型是ApiController Web Form 頁展示數(shù)據(jù)的共享類。

 

清單 1-5. 簡單模型,Web Form 頁,和 Web API 控制器

public class Book{
    public int Id { get; set; }
    public string Author { get; set; }
    public string Title { get; set; }
}public partial class _Default : Page{
    protected void Page_Load(object sender, EventArgs e)
    {
        int id;
        if (Int32.TryParse((string)Page.RouteData.Values["id"], out id))
        {
            var book = Books.List.FirstOrDefault(x => x.Id == id);
            if (book == null)
            {
                Response.StatusCode = 404;
                return;
            }
            ltlAuthor.Text = book.Author;
            ltlTitle.Text = book.Title;
            hplLink.NavigateUrl = "/api/books/" + book.Id;
        }
        Response.StatusCode = 404;
    }
}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;
    }
}

 

  這是一個約定,在解決方案的 Cotrollers 文件夾中放 ApiController,但是,這并不意味著這是強制要求;在當(dāng)前應(yīng)用程序中,只要被聲明為 public 的類,類名以Controller 為后綴的 IHttpController 實現(xiàn)類,都會被運行時發(fā)現(xiàn),也會被當(dāng)成一個可以處理的 HTTP 請求。

  就像 Web API MVC 一塊兒運行一樣,當(dāng)使用 Web Form 路由,我們也必須留心那些要被 Web API 處理的路由和那些要導(dǎo)向 ASPX 頁面之間引起的沖突。列表 1-6 展示了 Web Form Web API的簡單路由設(shè)置。ASP.NET Web API 路由是在 WebApiConfig 的靜態(tài)類中設(shè)置的,然而,Web Form 路由是在RouteConfig 靜態(tài)類中設(shè)置的。

 

列表 1-6. Web API 路由和 Web Form 路由

public static class RouteConfig{
    public static void RegisterRoutes(RouteCollection routes)
    {
        var settings = new FriendlyUrlSettings();
        settings.AutoRedirectMode = RedirectMode.Permanent;
        routes.EnableFriendlyUrls(settings);
        routes.MapPageRoute(
        "book-route",
        "book/{id}",
        "~/default.aspx");
    }
}public static class WebApiConfig{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services        // Web API routes        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
        );
    }
}


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI