创建Web API

 

   引言

 

   在公司中用到的都是webAPI的应用程序,这个东西之前没有接触过。但是这个并不是什么新鲜的东西,因我们

 

之前有mvc的基础,所以说学习这个东西还是比较容易的,在开始的时候自己可能突然蒙圈了。因为在人家项目中用

 

到的东西自己之前都没有接触过,感觉非常的陌生甚至整个混乱了。但是当我们静下心来好好想想的话是非常容易

 

的,就是在某些写法上不太一样,其余的都差不多,下面就给大家创建第一个程序。

 

  创建一个Web API程序

 

 

   启动VS2012创建一个新项目,在已经安装的模板中选择 ASP.NET MVC4 Web API程序

 

 

 

   在ASP.NET MVC项目对话框中选择Web API项,点击确定 

 

       

 

   创建成功之后工程中会自动添加一个Web API服务控制器,上面并附带访问地址 

 

    

 

   项目解决方案,选择Models文件夹右键 添加一个Model类 

 

 

 

 

 

   代码如下: 

 
namespace Git.Framework.WebAPI.Models
{
    public class Contact
    {
        public int ID { get; set; }

        public string Name { get; set; }

        public string Sex { get; set; }

        public DateTime Birthday { get; set; }

        public int Age { get; set; }
    } }
 

 

 工程解决方案选择Controllers文件夹右键添加一个新的Web API controller

 

 在添加控制器弹出对话框中选择模板: 空API控制器

       

 

   控制器中添加如下代码: 

 
namespace Git.Framework.WebAPI.Controllers
{
    public class ContactController : ApiController
    {
        Contact[] contacts = new Contact[] 
        { 
            new Contact(){ ID=1, Age=23, Birthday=Convert.ToDateTime("1977-05-30"), Name="情缘", Sex="男"},
            new Contact(){ ID=2, Age=55, Birthday=Convert.ToDateTime("1937-05-30"), Name="令狐冲", Sex="男"},
            new Contact(){ ID=3, Age=12, Birthday=Convert.ToDateTime("1987-05-30"), Name="郭靖", Sex="男"},
            new Contact(){ ID=4, Age=18, Birthday=Convert.ToDateTime("1997-05-30"), Name="黄蓉", Sex="女"},
        };

        /// <summary>
        /// /api/Contact
        /// </summary>
        /// <returns></returns>
        public IEnumerable<Contact> GetListAll()
        {
            return contacts;
        }

        /// <summary>
        /// /api/Contact/id
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Contact GetContactByID(int id)
        {
            Contact contact = contacts.FirstOrDefault<Contact>(item=>item.ID==id);
            if (contact == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return contact;
        }

        /// <summary>
        /// 根据性别查询
        /// /api/Contact?sex=女
        /// </summary>
        /// <param name="sex"></param>
        /// <returns></returns>
        public IEnumerable<Contact> GetListBySex(string sex)
        {
            return contacts.Where(item => item.Sex == sex);
        }
    }}
 

 

 浏览器访问API路径

 

Controller Methed

URI

GetListAll

/api/Contact

GetListBySex

"/api/Contact?sex=" + sex

GetContactByID

/api/Contact/"+id

 

   在IE浏览器中浏览出现如下效果

 

    

 

   如果在Chrome 或者 FireFox 中浏览会先下如下效果

 

 

 

 

 Javascript访问Web API

 

 在项目中添加一个About View视图

 

   

 

  代码如下:

 

[csharp] view plain copy
 
print?在CODE上查看代码片派生到我的代码片
  1. <span style="font-family:SimSun;font-size:18px;">@{  
  2.     Layout = null;  
  3. }  
  4.   
  5. <!DOCTYPE html>  
  6.   
  7. <html>  
  8. <head>  
  9.     <meta name="viewport" content="width=device-width" />  
  10.     <title>About</title>  
  11.     <script type="text/javascript" src="/Scripts/jquery-1.7.1.min.js"></script>  
  12.     <script type="text/ecmascript">  
  13.         $(document).ready(function () {  
  14.             $("#btnAll").click(function () {  
  15.                 $.getJSON("/api/Contact", function (data) {  
  16.                     var html = "<ul>";  
  17.                     $(data).each(function (i, item) {  
  18.                         html += "<li>"+item.ID+":"+item.Name+":"+item.Sex+"</li>";  
  19.                     });  
  20.                     html += "</ul>";  
  21.                     $("#contactAll").html(html);  
  22.                 });  
  23.             });  
  24.   
  25.   
  26.             $("#btnID").click(function () {  
  27.                 var id = $("#txtID").val();  
  28.                 $.getJSON("/api/Contact/"+id, function (data) {  
  29.                     var html = "<ul>";  
  30.                     $(data).each(function (i, item) {  
  31.                         html += "<li>" + item.ID + ":" + item.Name + ":" + item.Sex + "</li>";  
  32.                     });  
  33.                     html += "</ul>";  
  34.                     $("#contactID").html(html);  
  35.                 });  
  36.             });  
  37.   
  38.             $("#btnSex").click(function () {  
  39.                 var sex = $("#ddlSex").val();  
  40.                 $.getJSON("/api/Contact?sex=" + sex, function (data) {  
  41.                     var html = "<ul>";  
  42.                     $(data).each(function (i, item) {  
  43.                         html += "<li>" + item.ID + ":" + item.Name + ":" + item.Sex + "</li>";  
  44.                     });  
  45.                     html += "</ul>";  
  46.                     $("#contactSex").html(html);  
  47.                 });  
  48.             });  
  49.         });  
  50.     </script>  
  51. </head>  
  52. <body>  
  53.     <p>  
  54.         <input type="button" id="btnAll" value="查询所有" />   
  55.     </p>  
  56.     <p>  
  57.         <input type="text"  id="txtID" name="txtID"/>  
  58.         <input type="button" id="btnID" value="根据ID查询" />   
  59.     </p>  
  60.     <p>  
  61.         <select id="ddlSex" name="ddlSex">  
  62.             <option value="男">男</option>  
  63.             <option value="女">女</option>  
  64.         </select>  
  65.         <input type="button" id="btnSex" value="根据性别查询" />   
  66.     </p>  
  67.     <div id="contactAll">  
  68.     </div>  
  69.     <div id="contactID">  
  70.     </div>  
  71.     <div id="contactSex">  
  72.     </div>  
  73. </body>  
  74.   
  75. </html></span>  
<span style="font-family:SimSun;font-size:18px;">@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>About</title>
    <script type="text/javascript" src="/Scripts/jquery-1.7.1.min.js"></script>
    <script type="text/ecmascript">
        $(document).ready(function () {
            $("#btnAll").click(function () {
                $.getJSON("/api/Contact", function (data) {
                    var html = "<ul>";
                    $(data).each(function (i, item) {
                        html += "<li>"+item.ID+":"+item.Name+":"+item.Sex+"</li>";
                    });
                    html += "</ul>";
                    $("#contactAll").html(html);
                });
            });


            $("#btnID").click(function () {
                var id = $("#txtID").val();
                $.getJSON("/api/Contact/"+id, function (data) {
                    var html = "<ul>";
                    $(data).each(function (i, item) {
                        html += "<li>" + item.ID + ":" + item.Name + ":" + item.Sex + "</li>";
                    });
                    html += "</ul>";
                    $("#contactID").html(html);
                });
            });

            $("#btnSex").click(function () {
                var sex = $("#ddlSex").val();
                $.getJSON("/api/Contact?sex=" + sex, function (data) {
                    var html = "<ul>";
                    $(data).each(function (i, item) {
                        html += "<li>" + item.ID + ":" + item.Name + ":" + item.Sex + "</li>";
                    });
                    html += "</ul>";
                    $("#contactSex").html(html);
                });
            });
        });
    </script>
</head>
<body>
    <p>
        <input type="button" id="btnAll" value="查询所有" /> 
    </p>
    <p>
        <input type="text"  id="txtID" name="txtID"/>
        <input type="button" id="btnID" value="根据ID查询" /> 
    </p>
    <p>
        <select id="ddlSex" name="ddlSex">
            <option value="男">男</option>
            <option value="女">女</option>
        </select>
        <input type="button" id="btnSex" value="根据性别查询" /> 
    </p>
    <div id="contactAll">
    </div>
    <div id="contactID">
    </div>
    <div id="contactSex">
    </div>
</body>

</html></span>


 

   运行结果效果图

 

    

 

  Web API总结

 

    1.Web API 控制器(Controller) 继承ApiController

 

    2. Api 的 Url Map: api/{controller}/{id} 每个"Action"是通过 Http谓词(GET/POST/PUT/DELETE)映射的

 

   3.客户端可以通过 Http Header 的 Accept 指定返回数据的格式。默认是支持:appliction/xml 和

 

 application/json,当想返回比如 image/jpeg 这样的图片格式时,需要添加 MediaTypeFormatter 。比如:当

 

指定某个 Task 时,通过指定 Accept : image/jpeg 获取该 Task 的图片信息。

    

posted on 2016-08-24 17:00  張暁磊  阅读(278)  评论(0编辑  收藏  举报