基于.Net实现Restful Api

日期:2016-2-29 13:51 | 标签: Restful Api .Net | 阅读:881

之前接触较多的是使用Node设计Restful Api,给人感觉是简单方便,突然切换到.Net感觉有点不适应。

使用WCF实现

WCF使用方式多样,是微软发布的一套全面的技术方案,可以使用网站和本地可执行程序来创建服务。使用起来感觉很麻烦,各种错综复杂的配置与方法特性,用得好不好,还得看懂不懂原理。 其支持返回两种格式,只需要简单的配置即可:

 // 支持JSON 
 ResponseFormat=WebMessageFormat.Json
 // 支持XML
 ResponseFormat=WebMessageFormat.Xml

具体参考:用 C# 实现一个简单的 Rest Service 供外部调用
接口实现

 [ServiceContract(Name = "RestDemoServices")]
    public interface IRestDemoServices
    {
        [OperationContract]
        [WebGet(UriTemplate = Routing.GetClientRoute, BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat=WebMessageFormat.Json)]
        string GetClientNameById(string Id);
    }
    public static class Routing
    {
        public const string GetClientRoute = "/Client/{id}";
    }

业务实现

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, IncludeExceptionDetailInFaults = true)]
 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class RestDemoServices : IRestDemoServices
    {
        public string GetClientNameById(string Id)
        {
            string ReturnString = "your id is: " + Id;
            return ReturnString;
        }
    }

配置路由实现

通过修改web.config中的handlers来达到目的,我们只要把请求转到相应的处理器即可。此中用法只能算是一种黑魔法吧,当公布的api多起来显然是不行的。

 <system.webServer>
    <staticContent>
      ...
    </staticContent>
    <handlers>
      <add path="project/get" name="project_get" verb="*" type="WebApiHandler"/>
    </handlers>
       ...
</system.webServer>

使用NODE做中间层实现

此时,可以熟练使用Node来做路由搭建Restful API,数据与业务处理就放C#后台了,NODE放windows上是否一样的高效暂时未知,此外,这么牵强的使用NODE不是鸡肋?当然,业务也可以放在NODE端,只不过用NODE去使用微软的产品(如:连接MSSQL)总觉得不放心,对于不熟悉c#的同学说或许是一个好的方案。

总结

最终我选择的方法是配置路由实现,理由是wcf约定大于配置,不灵活,我方需要公布的api也就十几个,没必要折腾。

遇到的坑

IIS6与IIS7以上的配置有区别,我在本地调试时可以运行,发布到服务器上就死活行不通了。纠结几小时后居然是配置的问题,保险方法是都写上:

<!-- IIS6.0 -->
<system.web>
    <customErrors  mode="Off">
       <error statusCode="404" redirect="404.html" />
    </customErrors>
    <compilation targetFramework="4.0" debug="true"></compilation>
    <!--  仅对网页启用请求验证 -->
    <httpRuntime requestValidationMode="2.0"/>
    <httpHandlers>
        <add path="project/get" verb="*"  type="WebApiHandler"/>
    </httpHandlers>
  </system.web>
<!-- IIS7.0及以上 -->
 <system.webServer>
    <staticContent>
      ...
    </staticContent>
    <handlers>
      <add path="project/get" name="project_get" verb="*" type="WebApiHandler"/>
    </handlers>
       ...
</system.webServer>

参考

入门:构建简单的Web API
RESTful Web 服务:教程

版权声明: 署名-非商业性使用-禁止演绎 4.0 国际(CC BY-NC-ND 4.0
Copyright ©2013-2017 | 粤ICP备14081691号 | yipeng手工打造 | 联系方式