zoukankan      html  css  js  c++  java
  • ASP.NET WebServce项目下添加Http服务,支持Get,Post请求方式;传输格式json/xml

    由于WEBServce老项目中需要增添新的接口,而且添加的接口不希望被其它项目以引用Servces方式使用。

    那么得在现有Service项目中添加Http请求方式来实现系统间数据交互。只需要告知请求地址,请求方法(GET,POST),和数据格式(JSON,XML)即可实现了。

    客户端就如同调用普通HTTP接口一样。这样就不用强制引用啦!

    要让WebService支持HTTP调用,首先需要在配置文件system.web节点下添加:

    <webServices>

    <protocols>
    <add name="HttpPost"/>
    <add name="HttpGet"/>
    </protocols>
    </webServices>

    服务端代码实现:

    首先添加文件 TestService.asmx,添加如下方法:

     1 ......
     2 
     3 [WebMethod]
     4 public void TestSer()
     5 {
     6 var paramsHt = GetFormPostData<ReqData>();
     7 
     8 Record record = new Record();
     9 
    10 record.RetValue = new JavaScriptSerializer().Serialize(paramsHt);
    11 List<Record> list = new List<Record>();
    12 list.Add(record);
    13 
    14 ResponseJSON<Record>(list);
    15 }
    16 
    17 
    18 
    19 //将请求数据转换为对象T
    20 
    21 public static T GetFormPostData<T>()
    22 {
    23 var reqData = HttpContext.Current.Request;
    24 
    25 var data = default(T);
    26 using (StreamReader reqStream = new StreamReader(HttpContext.Current.Request.InputStream,System.Text.Encoding.UTF8))
    27 {
    28 data = new JavaScriptSerializer().Deserialize<T>(HttpContext.Current.Server.UrlDecode(reqStream.ReadToEnd()));
    29 }
    30 
    31 return data;
    32 }
    33 
    34 
    35 
    36 
    37 public static void ResponseJSON<T>(List<T> ret)
    38 {
    39 string json = new JavaScriptSerializer().Serialize(ret);
    40 
    41 HttpResponse res = HttpContext.Current.Response;
    42 res.ContentType = "text/plain";
    43 res.Charset = "utf-8";
    44 res.ContentEncoding = Encoding.UTF8;
    45 
    46 
    47 res.Write(json);
    48 
    49 }
    50 
    51 
    52 
    53 //构造请求数据
    54 
    55 public class ReqData
    56 {
    57 public int ID { get; set; }
    58 public string Name { get; set; }
    59 }
    60 
    61 
    62 
    63 ......

    WebForm请求端代码:

     1         protected void Button1_Click(object sender, EventArgs e)
     2         {
     3             string strURL = this.txtURL.Text.Trim();
     4 
     5             try
     6             {
     7                 byte[] postBytes = Encoding.UTF8.GetBytes(Server.UrlDecode(this.txtData.Text.Trim()));
     8                 HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(strURL);
     9                 myRequest.Method = "POST";
    10                 myRequest.ContentType = "application/xml";
    11                 //myRequest.ContentType = "text/html";
    12                 myRequest.ContentLength = postBytes.Length;
    13                 myRequest.Proxy = null;
    14                 Stream newStream = myRequest.GetRequestStream();
    15                 newStream.Write(postBytes, 0, postBytes.Length);
    16                 newStream.Close();
    17                 // Get response
    18                 HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
    19                 using (StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("utf-8")))
    20                 {
    21                     string content = reader.ReadToEnd();
    22 
    23                     this.lblResponseData.Text = content;
    24                 }
    25             }
    26             catch (System.Exception ex)
    27             {
    28 
    29                 this.lblResponseData.Text = ex.Message;
    30             }
    31  }

    请求地址:http://localhost:43211/TestService.asmx/TestSer

    请求数据:{"Name":"aa","ID":11}

    当请求Json数据格式不规范时,可能会报错:传入的对象无效,应为“:”或“}”,请检查构造json数据是否规范,如双引号,分号,逗号,大括号等。

  • 相关阅读:
    Java集合类初始容量、加载因子、扩容增量
    并发之原子性、可见性、有序性
    多线程面试题
    MySQL引擎及选择
    SHA和MD5的Salt
    基于SSM的单点登陆05
    基于SSM的单点登陆04
    基于SSM的单点登陆03
    基于SSM的单点登陆02
    基于SSM的单点登陆01
  • 原文地址:https://www.cnblogs.com/shouwu/p/6882360.html
Copyright © 2011-2022 走看看