zoukankan      html  css  js  c++  java
  • 给Web Api 再加把柴让它更火起来

       WebApi 这两天被dudu老大炒的老火了,看来我也需要加把柴了,呵呵。

         NLite WebApi 是基于Ndf的服务分发器引擎,并借助Asp.net 的http原生态无状态协议的基础上搭建起来的

    ,NLite Web api 完全无侵入性,不继承任何基类,只需要简单的配置即可把业务逻辑自动发不成NLite Web Api 服务, 简单易用,不废话,上过程!

         服务端Nlite Web API的实现

         需要准备的工具:Visual Studio 2010, NuGet(这两天现学了Nuget 包的制作,虽然去年简单学习并制作了

    NLite的包,不过早忘光了,看了dudu老大的WebApi介绍,感觉落伍了,抓紧进行了恶补,总算制作了一个NLite

    Web Api的Nuget 包了呵呵,在这里要多谢dudu了)

        1. 新建一个空的ASP.NET Web Application项目。

        

      2. 删除默认的Global文件(还没完全学会通过Nuget对Global文件的Merge处理,暂时先把原有的删掉,然后通过

    Nuget用新的内容来替换它)

      3. 通过NuGet 控制台添加NLite Web API的引用:Install-Package NLite.WebApi

      4. 通过Nuget,已经自动的把系统配置完毕,并且内置了几个Demo,还有Jquery客户端的调用示例(也是WebApi的

    测试工具简单易用又方便,试试就知道了,呵呵),下面是自动生成的代码和Demo例子

    Global文件的配置代码:

      

      Service文件夹(即Asp.net WebApi 中的Controllers文件夹)以及Service 类(相当于Controller,如HelloService

    ,相当于HelloController,服务名:hello)

         

      HelloService 的代码(HelloService的类上添加了Component标签,是让DI容器自动注册用的)

      

      5. F5 运行,并输入(系统自动调用HelloService的Index方法,参数name的值为"netcasewqs"

      

      备注:

      code 是服务器返回的状态码,code=1是成功,反之失败,data 的内容就是服务返回的真正结果"Hello netcasewqs"

       刚才是通过Url直接来访问WebApi,现在通过系统自带的工具来测试

       1. 在浏览器中键入http://localhost:2955/metadata/index.htm,系统会自动的把所有的Service(Controller)枚举出来,如图

       

      2. 选择一个Service(Controller)HelloService,系统自动的把该服务下所有符合协议的方法都枚举出来,如图

       

       3. 选择一个方法,系统会自动的弹出一个表单

       

      4.键入参数并单击“点击查看运行结果”按钮

        

      JQuery调用示例代码(获取所有的服务列表代码)

      1.客户端WebApi测试工具的前端代码是静态网页html+Jquery,后端的MetadataService如下:

       [Component]
        public class MetadataService
        {
            IServiceDescriptorManager ServiceDescriptorManager;
            public MetadataService(IServiceDescriptorManager serviceDescriptorManager)
            {
                ServiceDescriptorManager = serviceDescriptorManager;
            }
    
            public class ServiceModel
            {
                public string name;
                public string desc;
            }
    
            public ServiceModel[] Index()
            {
                return ServiceDescriptorManager.ServiceDescriptors
                    .Select(s => new ServiceModel { name = s.ServiceName, desc = s.Description }).ToArray();
            }
    
            public class OperationModel
            {
                public string name;
                public string desc;
            }
    
            public class ParameterModel
            {
                public string name;
                public string type;
                public string desc;
            }
    
            public OperationModel[] Actions(string serviceName)
            {
                var sd = ServiceDescriptorManager.GetServiceDescriptor(serviceName);
                if (sd == null)
                    return new OperationModel[0];
                return sd.Select(p => new OperationModel { name = p.OperationName, desc = p.Description }).ToArray();
            }
    
            public ParameterModel[] Args(string service, string action)
            {
                var sd = ServiceDescriptorManager.GetServiceDescriptor(service);
                if (sd == null)
                    return new ParameterModel[0];
                var op = sd[action];
                if (op == null)
                    return new ParameterModel[0];
                return op.Method.GetParameters()
                    .Select(p => new ParameterModel { name = p.Name, type = p.ParameterType.FullName, desc = GetParameterDescription(p) })
                    .ToArray();
            }
    
            private static string GetParameterDescription(ParameterInfo p)
            {
                var descAttr = p.GetAttribute<DescriptionAttribute>(true);
                return descAttr != null ? descAttr.Description : null;
            }
        }

      2. WebApi客户端工具-服务列表页面 Index.htm,其它的页面略

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Api 服务列表</title>
        <link href="Style.css" rel="stylesheet" type="text/css" />
        <script src="JScript.js" type="text/javascript"></script>
        <script src="../Scripts/jquery-1.4.1.js" type="text/javascript"></script>
        <script type="text/javascript" language="javascript">
            $(document).ready(function () {
                //获得站点路径(例如:http://www.baidu.com)
                var host = GetHost();
                var url = host + "/api/Metadata/Index.aspx";
                $.post(url, function (result) {
                    if (result.code == 1) {
                        $.each(result.data, function (i, field) {
                            var content_li = "<li>";
                            var content_a = "<a href='actions.htm?op=" + field.name + "'>" + FirstToUpper(field.name) + "</a>";
                            var content_span = "";
                            if (field.desc != null) {
                                content_span = "<span id='content_span'><br/>" + field.desc + "</span>";
                            }
                            var content_end_li = "</li>";
                            var content = content_li + content_a + content_span + content_end_li;
    
                            $("ul").append(content);
                        });
                    }
                    else {
                        alert(result.message);
                    }
                });
            });
        </script>
    </head>
    <body>
        <div id="content">
            <p class="heading1">
                服务列表</p>
            <br />
            <ul>
            </ul>
        </div>
    </body>
    </html>

      示例代码下载:

      https://files.cnblogs.com/netcasewqs/NdfWebApiDemo.zip

     总结:Asp.net WebApi 非常强大,吸收了Asp.net mvc很多精髓的设计思想,NLite WebApi 是构建在Ndf的服务分发器的基础上进行构造的,Ndf服务器分发器的一个宗旨是业务逻辑的高内聚,高复用性,高松耦合和便捷的可测试性为宗旨,支持嵌入式和分布式部署,详情见官网解释http://ndf.codeplex.com/

     

  • 相关阅读:
    cs ip 通过jmp转移命令间接赋值。无法直接对其赋值。
    8086 cpu为什么要把段地址*16+偏移量形成物理地址呢?
    保护模式和实模式的区别
    计算机的内存是以字节为单位的, 这个认知很重要。
    计算机的内存是以字节为单位的。
    一个字 word 是16位, 一个字由两个字节组成 , 字节=byte ,一个字节8位, 位=bit 如果没有特殊说明kb 就是指 k*bit
    物理地址为20位 如10000H 用段地址*16+偏移地址表示
    深入学习Java线程池
    在线考试系统镜像构建、推送、部署
    容器 变成镜像提交到阿里云镜像仓库
  • 原文地址:https://www.cnblogs.com/netcasewqs/p/2497638.html
Copyright © 2011-2022 走看看