欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET交互Rest服务接口(Jquery的Get与Post方式)

程序员文章站 2022-05-06 22:46:14
本文将通过一个简单的实例,介绍如何创建一个rest服务接口,以及通过jquery去对它进行调用;主要采取两种方式分别为get跟post;其中将通过post提交简单类型(sring)以及复杂类型(自定...
本文将通过一个简单的实例,介绍如何创建一个rest服务接口,以及通过jquery去对它进行调用;主要采取两种方式分别为get跟post;其中将通过post提交简单类型(sring)以及复杂类型(自定义实现usermodel)与rest服务进行交互;

 

 

 

一 rest服务创建

 

ASP.NET交互Rest服务接口(Jquery的Get与Post方式)

 

其中web客户端(clintweb)不对其它层的引用,只通过rest部署后的服务进行效互;

 

 

 

1:实体层(model)

 

 

using system.runtime.serialization;

 

namespace model

{

    [datacontract]

    public class usermodel

    {

        [datamember]

        public int id { get; set; }

 

        [datamember]

        public string username { get; set; }

 

        [datamember]

        public string password { get; set; }

 

        [datamember]

        public int age { get; set; }

 

        public override string tostring()

        {

            return string.format("id:{0};姓名: {1};年龄:{2};密码:{3}",id, username, age, password);

        }

    }

}

 

此处要注意[datacontract],[datamember]在命名空间using system.runtime.serialization下面;

 

 

 

 

2:接口层(iserviceinterface)

 

 

using system.servicemodel.web;

using system.servicemodel;

using model;

namespace iserviceinterface

{

    [servicecontract]

    public interface iuser

    {

        [webget(uritemplate = "/{id}", requestformat = webmessageformat.json, responseformat = webmessageformat.json)]

        usermodel getuserfromid(string id);

 

        [webget(uritemplate = "all", requestformat = webmessageformat.json, responseformat = webmessageformat.json,

         bodystyle = webmessagebodystyle.bare)]

        list<usermodel> getalluser();

 

        [webinvoke(uritemplate = "/user/username", method = "post", requestformat = webmessageformat.json,responseformat=webmessageformat.json,

         bodystyle = webmessagebodystyle.wrappedrequest)]

        string getusername(string name);

 

        [webinvoke(uritemplate = "/user/post", method = "post", requestformat = webmessageformat.json, responseformat = webmessageformat.json,

         bodystyle = webmessagebodystyle.wrappedrequest)]

        string updateuser(usermodel model);

    }

}

 

 

 

3:逻辑层(servicebll)

 

 

using iserviceinterface;

using model;

namespace servicebll

{

    public class userbll:iuser

    {

        public static list<usermodel> getuserlist()

        {

            list<usermodel> list = new list<usermodel>()

            {

                new usermodel(){id=1,username="踏浪帅",password="123456",age=27},

 

                new usermodel(){id=2,username="wujunyang",password="345678",age=30},

                new usermodel(){id=3,username="cnblogs",password="987654",age=33}

            };

            return list;

        }

 

        public usermodel getuserfromid(string id)

        {

            usermodel item = getuserlist().where(a => a.id == int.parse(id)).singleordefault();

            if (item != null)

            {

                return item;

            }

            else

            {

                return new usermodel();

            }

        }

 

        public list<usermodel> getalluser()

        {

            return getuserlist();

        }

 

        public string updateuser(usermodel model)

        {

            return model.tostring();

        }

 

        public string getusername(string name)

        {

            return "您好:" + name;

        }

    }

}

 

后面创建的客户端传参数要跟上面各个方法的参数相同,比如:name,model等

 

 

 

4:rest服务(restservice)

 

此处新建一个文本文件把它修改成.s格式,在其里面写入:

 

<%@ servicehost language="c#" debug="true" service="servicebll.userbll" %>

web.config文件内容:

 

 

<?xml version="1.0" encoding="utf-8"?>

<configuration>

  <system.web>

    <compilation debug="true" targetframework="4.0" />

  </system.web>

  <system.servicemodel>

    <behaviors>

      <endpointbehaviors>

        <behavior name="webhttp">

          <webhttp helpenabled="true"/>

        </behavior>

      </endpointbehaviors>

      <servicebehaviors>

        <behavior name="mapconfigbehavior">

          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->

          <servicemetadata httpgetenabled="true"/>

          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->

          <servicedebug includeexceptiondetailinfaults="true"/>

          <datacontractserializer maxitemsinobjectgraph="2147483647"/>

        </behavior>

      </servicebehaviors>

    </behaviors>

    <bindings>

      <webhttpbinding>

        <binding name="webhttpbindconfig" receivetimeout="00:30:00" sendtimeout="00:30:00" maxreceivedmessagesize="104857600">

          <readerquotas maxstringcontentlength="2147483647" maxarraylength="2147483647"/>

          <security mode="none"></security>

        </binding>

      </webhttpbinding>

    </bindings>

    <services>

      <service name="servicebll.userbll" behaviorconfiguration="mapconfigbehavior">

        <endpoint binding="webhttpbinding" contract="iserviceinterface.iuser" bindingconfiguration="webhttpbindconfig" behaviorconfiguration="webhttp"/>

      </service>

    </services>

  </system.servicemodel>

</configuration>