• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

问题

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

 

解决方案

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

 

 

 

图 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配置。

1
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 控制器

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
public class Book{
    public int Id { getset; }
    public string Author { getset; }
    public string Title { getset; }
}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 == nullthrow 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 路由

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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 }
        );
    }
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.netcore配置下载文件发布时间:2022-07-10
下一篇:
MVC数组模型绑定ASP.NETMVC数组模型绑定发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap