使用ASP.Net WebAPI构建REST服务(一)——简单的示例

由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法。本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务。

首先创建一个Asp.Net Web应用程序(我这里用的是Visual Studio 2013,它已经内置了Web API2)。

    

在出来的模板中选择Empty(空项目),并勾选WebAPI。点击确定后,就创建了一个空的WebAPI服务。

    

此时只有一个空项目,还没有任何功能,在进行下一步之前,首先我们来看一下REST的基本操作模型,大致可以分为如下四种:

  • POST — 创建资源
  • GET — 检索资源
  • PUT — 更新资源
  • DELETE — 删除资源

非常经典的CRUD模型。在Web API中实现这样一个的模型是非常简单的,直接使用向导建一个Controller即可

    

    

如果用传统的向导,记得把向导后面的那个1给去掉:

 

默认的模板内容如下:

    public class ValuesController : ApiController
    {
        // GET api/<controller>
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/<controller>/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/<controller>
        public void Post([FromBody]string value)
        {
        }

        // PUT api/<controller>/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/<controller>/5
        public void Delete(int id)
        {
        }
    }

这其实已经帮我们实现了一个最基本的服务了,不过这个服务中只实现了Get,它支持如下两种中方式的URL访问(其它的方式也能访问,但没有具体的效果):

  • api/values        访问所有的Value列表    
  • api/values/{id}        根据ID访问Value

按Ctrl + F5中执行,在浏览器中输入相应的地址即可看到结果

    

下面我们要做的就是完善它,实现一个简单的查询功能,这里我引用了微软官方的一个例子:

public class ProductsController : ApiController
{
        Product[] products = new Product[]
        {
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
        };

        public IEnumerable<Product> Get()
        {
            return products;
        }

        public IHttpActionResult Get(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);
        }
    }

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; }
    }

此时,我们就可以在浏览器中看到结果了(由于Controller改名字了,此时的地址就变成了api/products)

    

到此为止,一个基于Asp.net Web API的 简单的REST Web服务就构建完成了,由于篇幅所限,这里就不做更多的介绍了,跟多信息可以参看微软官方文档:Getting Started with ASP.NET Web API 2。另外,如果想对REST有更深入的了解的话,可以看看infoq的这篇文章:深入浅出REST。关于Asp.net Web API其它内容,我后续大概还会陆续写几篇文章来介绍它。

转载于:https://www.cnblogs.com/Jeely/p/10955954.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263873.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网页游戏服务器配置

最近要架设一个网页游戏&#xff0c;就到硬件市场配了一台服务器&#xff0c;下面是具体的配置清单&#xff1a; Intel Xeon 5310 1.6G 1350  金士顿4GB DDR2 667(ECC FB DIMM)*2 全缓冲处理内存 680*2  主板 Intel S5000VSA 1750  硬盘 320G SATA*2 450*2   国鑫GX514…

Linux sudo命令详解

Linux sudo命令以系统管理者的身份执行指令&#xff0c;也就是说&#xff0c;经由 sudo 所执行的指令就好像是 root 亲自执行。 使用权限&#xff1a;在 /etc/sudoers 中有出现的使用者。 简单的说&#xff0c;sudo 是一种权限管理机制&#xff0c;管理员可以授权于一些普通用户…

告别花瓶:2015年智能电视路在何方?

智能手机与平板在IT市场风生水起&#xff0c;让几岁小孩到大爷大妈们都对玩手机、平板乐此不彼。曾经辉煌几十年的电视行业&#xff0c;如今又重新融合了智能系统以全新的面貌出现在人们面前。多家互联网企业对这一“翻新”的市场虎视眈眈&#xff0c;并推出了多款智能电视。但…

文件类型

转载于:https://www.cnblogs.com/hlc-123/p/10958326.html

灾备还缺一套评价体系

1月10日&#xff0c;灾备技术产业联盟正式成立。这样一个中立的、由业内众多厂商和大型用户组成的、以服务为宗旨的联盟将为我国灾备技术和应用的规范化发展做出积极贡献。经过一年多的酝酿、历经7次筹备会议&#xff0c;由华为、北京邮电大学、中治研国际信息技术研究院和中国…

DFS知识点

2019-06-01 11:14:34 加油&#xff0c;坚持&#xff01;&#xff01;&#xff01; 1. 2. 3. 转载于:https://www.cnblogs.com/Artimis-fightting/p/10960409.html

Sery送的书与网站短信解决方案

今天Sery&#xff08;http://sery.blog.51cto.com/&#xff09;在qq上说要送我一本他刚写的书《互联网运营智慧》&#xff0c;因为里面引用了我写的一段程序。 #!/usr/bin/perl -w use strict; use LWP::Simple; use URI::Escape; use Digest::MD5; my ($mobile, $content) AR…

兰州财经大学JAVA期末考什么_兰州财经大学大学国文下答案

兰州财经大学大学国文下答案更多相关问题建立HSE管理体系可提高企业安全、环境和健康()。A.管理水平B.操作水平C.使用水平D.能源水平计算机保存矢量图形实际上是存储描述矢量图形的一组绘图指令及有关的参数&#xff0c;因此 矢量图形的存储取样频率、量化精度将影响录制数字音…

Android 反射获取内外置存储卡方法

2019独角兽企业重金招聘Python工程师标准>>> 以前的Android(4.1之前的版本)中&#xff0c;SDcard跟路径通过“/sdcard”或者“/mnt/sdcard”来表示存储卡&#xff0c;而在Jelly Bean系统中修改为了“/storage/sdcard0”&#xff0c;以后可能还会有多个SDcard的情况。…

docker安装mysql redis_Docker安装Mysql和Redis以及构建部署应用镜像

为了方便本地测试项目&#xff0c;为了方便开启新的环境&#xff0c;为了方便部署&#xff0c;打算本地利用Docker安装Mysql和Redis。搭建Springboot项目&#xff0c;编写Dockerfile&#xff0c;打包构建镜像。简单使用docker-compose启动服务。简述docker-compose和K8S。环境系…

plsql if

set serveroutput onaccept num prompt 请输入一个数字; declare pnum number : &num;beginif pnum0 then dbms_output.put_line(您输入的数据是0);elsif pnum1 then dbms_output.put_line(您输入的数据是1);elsif pnum2 then dbms_output.put_line(您输入的数据是2);e…

Windows 下查看端口占用情况 netstat / tasklist / findstr

为什么80%的码农都做不了架构师&#xff1f;>>> Windows服务器不熟悉很多&#xff0c;尤其是防火墙这块。不过其实和Linux一样&#xff0c;省事的话就是关了就好了。不过对于端口占用还是时常有的&#xff0c;比如QQ音乐&#xff0c;迅雷这些&#xff0c;如果你的电…

unicode 字符串转成 TDesC-转贴

unicode 字符串转成 TDesC所有描述符&#xff0c;其实都不是真实的类&#xff0c;而是一个typedef。在非内核模式的时候&#xff0c;所有的描述符&#xff0c;如TDesC&#xff0c;其真实的实现是TDesC16&#xff0c;在内核模式的时候&#xff0c;则是TDesC8。还是看名取义&…

第二阶段团队冲刺(七)

1、我昨天的成就&#xff1a;从老师那里要来了完整的无课表信息&#xff0c;不需要再从网站爬取&#xff0c;无课表导入数据库 2、遇到什么困难&#xff1a;无课表导入数据库格式兼容问题 3、今天的任务 &#xff1a;购买阿里云服务器并配置 转载于:https://www.cnblogs.com/Ad…

java任务poer_java-Powermock-模拟超级方法调用

这是我的代码-import org.junit.Test;import org.junit.runner.RunWith;import org.powermock.modules.junit4.PowerMockRunner;import org.powermock.core.classloader.annotations.*;import static org.powermock.api.support.SuppressCode.*;class BaseService {public int …

2015 年度计划

2019独角兽企业重金招聘Python工程师标准>>> scala -> akka -> sparketcd 使用开源产品 negroni https://github.com/codegangsta/negroni转载于:https://my.oschina.net/kuerant/blog/372981

Mybatis 动态传sql可以查询表名,任意表名,不固定字段的个数返回未定义的类型以及增删改...

mysql查询表名&#xff1a; SELECT table_name FROM information_schema.tables WHERE table_schemasell AND table_typebase table;查询表中的字段&#xff1a; SELECT column_name FROM information_schema.columns WHERE table_schemasell AND table_nameseller_infoSpringB…

As3.0与java数据类型的比较总结

As3.0与java数据类型的比较总结 1. 在As3.0中所有的数据类型都是对象&#xff0c;都有自己的方法和属性&#xff1b; Java中的基本数据类型&#xff0c;其采取和C和C相同的方法。也就是不用new来创建变量&#xff0c;而是创建一个并非是引用的“自动”变量。这个变量直接存储…

php透明颜色的代码,PHP imagecolorallocatealpha - 为一幅图像分配颜色和透明度

PHP imagecolorallocatealpha - 为一幅图像分配颜色和透明度imagecolorallocatealpha — 为一幅图像分配颜色和透明度。语法int imagecolorallocatealpha ( resource $image , int $red , int $green , int $blue , int $alpha )imagecolorallocatealpha() 的行为和 imagecolor…

C语言goto关键字—尽量少用

一般来说&#xff0c;编码的水平与goto 语句使用的次数成反比。有的人主张慎用但不禁用goto语句&#xff0c;但我主张禁用。关于goto 语句的更多讨论可以参看Steve McConnell 的名著《CodeComplete. Second Edition》。 禁用goto 语句。自从提倡结构化设计以来&#xff0c;goto…