很早之前看到过RESTful Web Services,并未在意,也没找相关资料进行学习。今天偶尔有一机会,就找了点资料进行研究,发现RESTful真是“简约而不简单”。下面用示例来说明:

1 项目结构

2 REST 服务接口定义

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.ServiceModel;
  6. using System.ServiceModel.Web;
  7. namespace Jack_Restful_Service
  8. {
  9.  
  10. [ServiceContract(Name = "RestfulService",Namespace="http://www.cnblogs.com/isaboy")]
  11. public interface IRestDemoServices
  12. {
  13. [OperationContract]
  14. [WebGet(UriTemplate = Routing.GetClientRoute, BodyStyle = WebMessageBodyStyle.Bare)]
  15. string GetClientNameById(string Id);
  16.  
  17. [OperationContract]
  18. [WebGet(UriTemplate = Routing.AddClientRoute, BodyStyle = WebMessageBodyStyle.Bare)]
  19. string Add(string a, string b);
  20. //error
  21. //string Add(int a, int b);
  22.  
  23. [OperationContract]
  24. [WebGet(UriTemplate = Routing.LoginClientRoute, BodyStyle = WebMessageBodyStyle.Bare)]
  25. string Login(string uname, string upwd);
  26.  
  27. //post
  28. [OperationContract]
  29. [WebInvoke(RequestFormat = WebMessageFormat.Json,
  30. ResponseFormat = WebMessageFormat.Json,
  31. BodyStyle = WebMessageBodyStyle.Bare,
  32. Method = "POST", UriTemplate = "/Client/UpdateUser/{uname}")]
  33. User UpdateUser(string uname, User newUser);
  34.  
  35. }
  36. //URI路由
  37. public static class Routing
  38. {
  39. public const string GetClientRoute = "/Client/{id}";
  40.  
  41. public const string AddClientRoute = "/Client/{a},{b}";
  42. //{uname}里面的参数名称要和string Login(string uname, string upwd);一致
  43. public const string LoginClientRoute = "/Client/{uname}__{upwd}";
  44. }
  45.  
  46. }

3 REST服务接口实现

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.ServiceModel;
  6. using System.ServiceModel.Activation;
  7. namespace Jack_Restful_Service
  8. {
  9.  
  10. [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
  11. ConcurrencyMode = ConcurrencyMode.Single,
  12. IncludeExceptionDetailInFaults = true,
  13. Namespace = "http://www.cnblogs.com/isaboy")]
  14. [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
  15. public class RestDemoServices : IRestDemoServices
  16. {
  17. //GET
  18. public string GetClientNameById(string Id)
  19. {
  20. string ReturnString = "Your id is: " + Id;
  21.  
  22. return ReturnString;
  23. }
  24.  
  25. public string Add(string a, string b)
  26. {
  27. int sum = int.Parse(a) + int.Parse(b);
  28. return sum.ToString();
  29. }
  30.  
  31. public string Login(string uname, string upwd)
  32. {
  33. if (uname == "admin" && upwd == "admin")
  34. {
  35. return "success";
  36. }
  37. else
  38. {
  39. return "false";
  40. }
  41. }
  42. //POST
  43. public User UpdateUser(string uname, User newUser)
  44. {
  45. return newUser;
  46. }
  47. }
  48.  
  49. }

4 将服务HOST

  1. Console.WriteLine("----------Restful Service Start--------------");
  2. RestDemoServices demoServices = new RestDemoServices();
  3. WebServiceHost _serviceHost = new WebServiceHost(demoServices, new Uri("http://localhost:8000/RestfulService"));
  4. _serviceHost.Open();
  5. Console.WriteLine("----------Restful Service Opened--------------");
  6. Console.WriteLine("http://localhost:8000/RestfulService/Client/8");
  7. Console.WriteLine("http://localhost:8000/RestfulService/Client/2,5");
  8. Console.WriteLine("http://localhost:8000/RestfulService/Client/admin__admin");

5 打开浏览器,即可进行资源访问

另外,我们可以用代码进行测试

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Web;
  6. using System.Net;
  7. using System.IO;
  8. namespace PostServiceTest
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. //get
  15. HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:8000/RestfulService/Client/8");
  16. WebResponse response = request.GetResponse();
  17. string result = new StreamReader(response.GetResponseStream()).ReadToEnd();
  18. Console.WriteLine(result);
  19.  
  20. //post
  21. string requestData = "{\"uname\":\"admin\",\"upwd\":\"admin\"}";
  22. byte[] data = Encoding.UTF8.GetBytes(requestData);
  23. request = (HttpWebRequest)WebRequest.Create("http://localhost:8000/RestfulService/Client/UpdateUser/admin");
  24. request.Method = "POST";
  25. request.ContentType = "application/json";
  26. Stream dataStream = request.GetRequestStream();
  27. dataStream.Write(data, , data.Length);
  28. dataStream.Close();
  29.  
  30. response = request.GetResponse();
  31. result = new StreamReader(response.GetResponseStream()).ReadToEnd();
  32. Console.WriteLine(result);
  33. Console.ReadKey();
  34. }
  35. }
  36. }

.NET RESTful Web Services入门的更多相关文章

  1. RESTful Web Services初探

    RESTful Web Services初探 作者:杜刚 近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTf ...

  2. Jersey the RESTful Web Services in Java

    Jersey 是一个JAX-RS的实现, JAX-RS即Java API for RESTful Web Services, 支持按照表述性状态转移(REST)架构风格创建Web服务. REST 中最 ...

  3. 使用 Spring 3 来创建 RESTful Web Services

    来源于:https://www.ibm.com/developerworks/cn/web/wa-spring3webserv/ 在 Java™ 中,您可以使用以下几种方法来创建 RESTful We ...

  4. 就是这么简单!使用Rest-assured 测试Restful Web Services

    使用 Rest-assured 测试 Restful Web Services 转载注明出处: http://www.cnblogs.com/wade-xu/p/4298819.html 这里向大家介 ...

  5. cxf开发Restful Web Services

    一.restful web services rest全称是Representation State Transfer(表述性状态转移).它是一种软件架构风格,只是提供了一组设计原则和约束条件.在re ...

  6. RESTful Web Services测试工具推荐

    命令行控的最爱:cURL cURL是一个很强大的支持各种协议的文件传输工具,用它来进行RESTful Web Services的测试简直是小菜一碟.这个工具基本上类Unix操作系统(各种Linux.M ...

  7. 【转】RESTful Web Services初探

    近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTful风格的Web Services,比较著名的包括Twit ...

  8. 使用 Spring 3 来创建 RESTful Web Services(转)

    使用 Spring 3 来创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参 ...

  9. 基于Spring设计并实现RESTful Web Services(转)

    基于Spring设计并实现RESTful Web Services 在本教程中,你将会使用Spring来创建一个具有生产力的RESTful网络服务. 为什么用RESTful网络服务? 从和Amazon ...

随机推荐

  1. http协议(十一)http与https

    一.http的缺点 之前有介绍过http协议相关的一些知识,http是相当优秀和方便的,但它也有缺点,主要不足表现在如下几个方面: △ 通信使用明文(不加密),内容可能会被窃听 △ 不验证通信方的身份 ...

  2. 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  3. 一键部署mono 免费空间支持ASP.NET MVC 再也不担心伙食费换空间了

    一直以来 部署mono 都是很头疼的事情 因为是我在是不熟悉非win环境,今天偶然发现这个项目,挺好的,分享下 https://github.com/wshearn/openshift-communi ...

  4. [译] 在Web API 2 中实现带JSON的Patch请求

    原文链接:The Patch Verb in Web API 2 with JSON 我想在.NET4.6 Web API 2 项目中使用Patch更新一个大对象中的某个字断,这才意识到我以前都没有用 ...

  5. some OpenGL constants

    some OpenGL constants This is from (https://github.com/peterderivaz/pyopengles/blob/master/gl2.py) G ...

  6. ILMerge合并多个DLL

    序言 如果你的项目要提供多个dll给别人用,那么不妨让你的dll合并为一个,让别人看起来简洁,引用起来不会过于繁琐. 本篇比较少,但也算是比较实用吧. 下载微软的辅助工具ILMerge Imerge下 ...

  7. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  8. 填坑系列:通过ESXi来配置IPMI

    近日西安的天气很不错,可是看到从其他地方迁移来的主机在新环境下无法远程调试怪郁闷的,这就需要填坑,要不就会给后来者挖更大的坑. 今天遇到的坑是在IPMI的网络设置里面启用了VLAN标签之后,在新环境下 ...

  9. Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...

  10. 解决iframe作为子窗口,刷新后iframe页面跳转到其它页面的问题

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/5990262.html 前言: 在开发网站时,尤其是管理后台,我们经常会使用iframe作为内容窗 ...