.NET 2.0 REST 服务






4.55/5 (9投票s)
一个用 .NET 2.0 编写的 REST 服务的工作实现。
引言
几天来,我一直在尝试寻找一个用 .NET 编写的 REST Web 服务的例子。由于 ASTORIA 尚未成为一个成熟的框架,我宁愿选择基于已经发布的产品的示例,即使这意味着我应该牺牲一些功能或编写更多代码。
背景
该网站上发表了两篇非常有趣的的文章:REST Web 服务的全面介绍 - 是什么以及如何实现 - 第 2 部分 - 设计 和 ASP.NET 2.0 (C#) 中的 REST Web 服务,但它们都没有向我展示一个完整的 .NET 实现。因此,我决定编写我自己的。
REST Web 服务的全面介绍 - 是什么以及如何实现 - 第 2 部分 - 设计 详细解释了如何格式化一个合适的 REST 请求,如何处理不同的 VERB,以及在每种情况下应该向服务传递什么样的信息。我鼓励您看看这篇文章,因为我不会再次讨论这些概念。
我将为您提供一个基于 .NET 2.0 框架内置的 HTTP 请求处理程序的简单实现。还有许多其他方法可以做到这一点。你可以尝试使用 HTTP 模块,你可以选择 WCF 类,还有一些其他的。我必须做出选择,目标是提出大多数人都可以使用的方法。
使用代码
Visual Studio 2008 解决方案将由一个网站组成,该网站将根据 REST 模型提供数据服务,以及一个客户端。
Web 服务将有一个 web.config 文件,它将映射服务 URL 请求,以及每个动词处理程序的(非常简单)类。POST 和 GET 动词可以从任何 Web 浏览器发送,因此我将为您提供一个简单的 .html 测试页面。对于 PUT 和 DELETE,我已经构建了一个自定义客户端。
最后,Contacts.xml 是我们的数据源。
创建 Web 服务
设置 Web 服务的首要任务是配置 IIS 以正确处理请求。一个基本的配置将是删除所有继承的处理程序并设置您自己的处理程序。为此,您需要像这样编辑您的 web.config...
<configuration>
<system.web>
<httpHandlers>
<clear />
<add verb="PUT" path="*" validate="false"
type="RESTHandlers.PutHandler, RESTHandlers"/>
<add verb="POST" path="*" validate="false"
type="RESTHandlers.PostHandler, RESTHandlers"/>
<add verb="GET" path="*" validate="false"
type="RESTHandlers.GetHandler, RESTHandlers"/>
<add verb="DELETE" path="*" validate="false"
type="RESTHandlers.DeleteHandler, RESTHandlers"/>
</httpHandlers>
</system.web>
</configuration>
下一步是创建处理程序。这将是一个基本任务。您的类应该实现 IHttpHandler
并处理请求。基本结构应该是这样的
public void ProcessRequest(HttpContext context)
{
// a) Validate the request.
// Remember, for example, that a PUT should not contain
// any query strings values.
if(context.Request.QueryString != sting.Empty)
{
SendClientTheError();
return;
}
// b) Process the request.
...
// c) Send a response.
HttpResponse response = context.Response;
response.Write("OK");
}
这就是关于服务的所有内容...
客户端
本解决方案中包含两个客户端作为示例:一个网页和一个控制台应用程序。
一个 .htm 文件将显示从 <A>
和 <FORM>
标签发送的 GET 和 POST 动词的一些示例。
控制台应用程序将发出示例 PUT 和 DELETE 命令。
关注点
请注意,我没有为请求编写详尽的验证,并且这些示例不是该服务的完整场景。例如,我还没有编写代码来使用查询字符串进行 DELETE 来测试错误消息。此外,当您实现此类服务时,添加一些其他验证是明智的,例如
- 更详细地验证请求 URI。
- 验证查询字符串参数。
- 根据模式验证收到的 XML。
- 对请求上下文(如用户、引用者等)进行任何其他验证...