[水煮ASP.NETWebAPI2方法论](1-2)在WebForm应用程序中添加ASP.NETWebAPI

问题

在安源等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、做网站 网站设计制作定制制作,公司网站建设,企业网站建设,成都品牌网站建设,全网整合营销推广,成都外贸网站建设,安源网站建设费用合理。

 怎么样将 Asp.Net Web Api加入到Asp.Net Web From应用程序中

 

解决方案

 在Visual Studio 2013中,创建新的 Web From,可以直接在"新建 ASP.NET项目"创建项目向导中,勾选 ASP.NET Web API,将其加入进来。如图 1-2所示。

 

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

 

图 1-2.在Asp.NET 项目向导,同时选中 Web Form和 Web API

 

 因为可以通过 NuGet添加 ASP.NET Web API,所以使用“Install-Package Microsoft.AspNet.WebApi”就可以轻易将其添加到现有的 Web Form解决方案中。

 在Visual Studio 2012中使用也很简单,只要创建一个 WebForm项目,然后通过NuGet来安装 Web API就可以。

 

工作原理

和在MVC中使用 ASP.NET Web API一样,在 Web Form项目中ASP.NET Web API使用的结果就是,Web API和 Web Form应用程序运行在同一个 ASP.NET进程中。

 在 ASP.NET项目中安装 Microsoft.AspNet.WebApi NuGet包时,会在App_Start文件夹中添加 WebApiConfig的静态类。这个文件是用来配置 ASP.NET Web API和定义 ASP.NET Web API路由。

 另外,在Global.asax中的 Application_Start可以找到被添加的代码,就像下面的代码片段,调用Web API配置。

GlobalConfiguration.Configure(WebApiConfig.Register);

 

 Web API运行在 Web Form应用程序中与运行在 MVC应用程序中没什么不同。每个请求仍将被相关的 IHttpHandler处理。可能是用于处理 Web API的 HttpControllerHandler或者是用于处理 Web Form的处理器。Web Form相关的 ASPX扩展名会交给 PageHandlerFactory,依次调用相关的 IHttpHandler来处理 HTTP请求。System.Web.UI.Page类是 Web Form应用程序的默认组成部分,也是一个 IHttpHandler,其实他才是请求处理器的真正执行者。

 

代码演示

清单1-5展示了一个简单的模型类,这个模型是ApiController和 Web Form页展示数据的共享类。

 

清单 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,但是,这并不意味着这是强制要求;在当前应用程序中,只要被声明为 public的类,类名以Controller为后缀的 IHttpController实现类,都会被运行时发现,也会被当成一个可以处理的 HTTP请求。

 就像Web API和 MVC一块儿运行一样,当使用 Web Form路由,我们也必须留心那些要被 Web API处理的路由和那些要导向 ASPX页面之间引起的冲突。列表 1-6展示了 Web Form和 Web API的简单路由设置。ASP.NET Web API路由是在 WebApiConfig的静态类中设置的,然而,Web Form路由是在RouteConfig静态类中设置的。

 

列表 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 }
        );
    }
}

文章名称:[水煮ASP.NETWebAPI2方法论](1-2)在WebForm应用程序中添加ASP.NETWebAPI
转载来于:http://myzitong.com/article/jioodc.html