zoukankan      html  css  js  c++  java
  • 以Web Host的方式来寄宿Web API

    一、新建一个Common的类库项目并新建一个测试用的Contact实体类

     1 namespace Common
     2 {
     3     public class Contact
     4     {
     5         public string Id { get; set; }
     6         public string Name { get; set; }
     7         public string PhoneNum { get; set; }
     8         public string EmailAddress { get; set; }
     9         public string Address { get; set; }
    10     }
    11 }

     二、新建一个WebApi的类库项目并新建一个测试用的ContactsController类

    表现为HttpController 的Web AP1定义在WebApi项目之中,我们一般将ApiController作为继承的基类。ApiControIIcr定义在
    “system.Web Httpd1” 程序集中,我们可以在目录“%ProgramFiles%Microsoft ASP.NETASP.NET Web Stack 5Packages” 中找到这个程序集。
    具体来说,该程序集存在于子目录“Microsoft.AspNet.WebApi.Core.5.0.0lib et45” 中。

    Web API体现在如下所示的ContactsController类型中。在该类型中,我们定义了Get、Post、Put和Delete这4个Action方法,它们分别实现了针对联系人的查询、添加、修改和删除操作。Action方法Get具有一个表示联系人ID的可缺省参数,如果该参数存在则返回对应的联系人,否则返回整个联系人列表。由于ASP.NET Web API默认实现了Action方法与HTTP方法的映射,所以方法名也体现了它们各自所能处理的请求必须采用的HTTP方法。

     1 using System.Collections.Generic;
     2 using System.Linq;
     3 using System.Web.Http;
     4 using Common;
     5 
     6 namespace WebApi
     7 {
     8     public class ContactsController : ApiController
     9     {
    10         private static readonly List<Contact> Contacts;
    11 
    12         static ContactsController()
    13         {
    14             Contacts = new List<Contact>
    15             {
    16                 new Contact
    17                 {
    18                     Id = "001",
    19                     Name = "张三",
    20                     PhoneNum = "12345678",
    21                     EmailAddress = "zhangsan@gmail.com",
    22                     Address = "add1"
    23                 },
    24                 new Contact
    25                 {
    26                     Id = "002",
    27                     Name = "李四",
    28                     PhoneNum = "23456789",
    29                     EmailAddress = "lisi@gmail.com",
    30                     Address = "add2"
    31                 }
    32             };
    33         }
    34 
    35         public IEnumerable<Contact> Get(string id = null)
    36         {
    37             return from contact in Contacts where contact.Id == id || string.IsNullOrWhiteSpace(id) select contact;
    38         }
    39 
    40         public void Post(Contact contact)
    41         {
    42             Contacts.Add(contact);
    43         }
    44 
    45         public void Put(Contact contact)
    46         {
    47             Contacts.Remove(Contacts.First(c => c.Id == contact.Id));
    48             Contacts.Add(contact);
    49         }
    50 
    51         public void Delete(string id)
    52         {
    53             Contacts.Remove(Contacts.First(c => c.Id == id));
    54         }
    55     }
    56 }

     三,新建一个ASP.NET Web项目并修改Global.asax.cs文件

    除了在Application_Start中加入路由配置外,还需要在此项目中引用之前创建的WebApi项目

     1 using System;
     2 using System.Web;
     3 using System.Web.Http;
     4 using System.Web.Routing;
     5 
     6 namespace WebHost
     7 {
     8     public class Global : HttpApplication
     9     {
    10         protected void Application_Start(object sender, EventArgs e)
    11         {
    12             RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
    13 
    14             // 全局路由表HttpRouteCollection对象的扩展方法MapHttpRoute来完成
    15             GlobalConfiguration.Configuration.Routes.MapHttpRoute("defaultApi", "api/{controller}/{id}", new {id = RouteParameter.Optional});
    16         }
    17     }
    18 }

    四,测试

    用Chrome默认一application/xml的Content-Type返回,IE则默认以application/json的Content-Type返回;

    我这边用Chrome测试的返回结果:

    请求URL:http://localhost/webhost/api/contacts

    <ArrayOfContact xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Common">
    <Contact>
    <Address>add1</Address>
    <EmailAddress>zhangsan@gmail.com</EmailAddress>
    <Id>001</Id>
    <Name>张三</Name>
    <PhoneNum>12345678</PhoneNum>
    </Contact>
    <Contact>
    <Address>add2</Address>
    <EmailAddress>lisi@gmail.com</EmailAddress>
    <Id>002</Id>
    <Name>李四</Name>
    <PhoneNum>23456789</PhoneNum>
    </Contact>
    </ArrayOfContact>

    请求URL:http://localhost/webhost/api/contacts/001

    <ArrayOfContact xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Common">
    <Contact>
    <Address>add1</Address>
    <EmailAddress>zhangsan@gmail.com</EmailAddress>
    <Id>001</Id>
    <Name>张三</Name>
    <PhoneNum>12345678</PhoneNum>
    </Contact>
    </ArrayOfContact>

      

  • 相关阅读:
    关于const_cast
    TinyXPath与TinyXML
    C++的异常
    如何让对象只能处于堆中
    股票的委托价、成交价与成本价的关系
    static_cast dynamic_cast reinterpret_cast const_cast
    C++ MD5,SHA1源码下载和简单调用
    C++中char[]转string
    HttpWorker
    winnet winhttp
  • 原文地址:https://www.cnblogs.com/frankyou/p/4682805.html
Copyright © 2011-2022 走看看