最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.net webapi接收xml格式數(shù)據(jù)的3種情況小結(jié)

 更新時(shí)間:2019年02月15日 11:24:06   作者:野菊花  
這篇文章主要給大家總結(jié)介紹了關(guān)于.net webapi接收xml格式數(shù)據(jù)的3種情況,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

ASP.NET Web API是​​一個(gè)框架,可以很容易構(gòu)建達(dá)成了廣泛的HTTP服務(wù)客戶端,包括瀏覽器和移動(dòng)設(shè)備。是構(gòu)建RESTful應(yīng)用程序的理想平臺(tái)的.NET框架。

本文主要給大家介紹了關(guān)于.net webapi接收xml格式數(shù)據(jù)的相關(guān)內(nèi)容,下面話不多說了,來一起看看詳細(xì)的介紹吧

webapi 接收 xml 的三種方法

前段時(shí)間接到一個(gè)任務(wù)寫一個(gè)小接口,要接收java端返回過來的短信xml數(shù)據(jù)。

剛拿到項(xiàng)目,我的第一想法是對(duì)方會(huì)以什么形式發(fā)送xml格式的數(shù)據(jù)給我呢,設(shè)想三種情況。

我一開始拿到手上的是一串xml格式字符串。如下

<?xml version="1.0" encoding="utf-8"?>
<returnForm>
 <type>2</type> 
 <count>1</count> 
 <list> 
 <pushSmsForm> 
  <eprId>0</eprId> 
  <mobile>13560739262</mobile> 
  <msgId>30217002</msgId> 
  <content> <![CDATA[回復(fù)內(nèi)容]]> </content> 
  <userId>id</userId> 
  <extNum>擴(kuò)展號(hào)</extNum> 
  <recvNum/> 
 </pushSmsForm> 
 <pushSmsForm> 
  <eprId>0</eprId> 
  <mobile>13560739261</mobile> 
  <msgId>30217001</msgId> 
  <content> <![CDATA[回復(fù)內(nèi)容]]> </content> 
  <userId>id</userId> 
  <extNum>擴(kuò)展號(hào)</extNum> 
  <recvNum/> 
 </pushSmsForm> 
 </list> 
</returnForm>

思路

這個(gè)xml的基本知識(shí)我就不一一介紹了,簡(jiǎn)單說一下<![CDATA[ ]]>標(biāo)志,里面的內(nèi)容是沒有限制的(除了< 和 >)。繼續(xù)講思路,文檔中只說了是post方法,所以我想到了三種可能:

  1. 對(duì)方通過form表單提交了一個(gè)xml文件,我需要用文件流(filestream)讀取文件,并進(jìn)行轉(zhuǎn)化為實(shí)體類
  2. 對(duì)方通過post了一個(gè)字符串過來,我接收字符串并轉(zhuǎn)化為實(shí)體類。
  3. 對(duì)方直接在請(qǐng)求里添加了xml字符串(text/xml)

先構(gòu)建兩個(gè)xml反序列化的幫助類

  /// <summary> 
  /// 反序列化 
  /// </summary> 
  /// <param name="type">類型</param> 
  /// <param name="xml">XML字符串</param>
  /// <returns></returns> 
  public static object Deserialize(Type type, string xml)
  {
   using (StringReader sr = new StringReader(xml))
   {
    XmlSerializer xmldes = new XmlSerializer(type);
    return xmldes.Deserialize(sr);
   }
  }

  /// <summary> 
  /// 反序列化 
  /// </summary> 
  /// <param name="type"></param> 
  /// <param name="xml"></param> 
  /// <returns></returns> 

  public static object Deserialize(Type type, Stream stream)
  {
   XmlSerializer xmldes = new XmlSerializer(type);
   return xmldes.Deserialize(stream);
  }

利用visual studio自帶的功能xml生成類(編輯-->選擇性粘貼-->paste xml as classes)

 [System.SerializableAttribute()]
 [System.ComponentModel.DesignerCategoryAttribute("code")]
 [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
 public partial class returnFormPushSmsForm
 {
  private int eprIdField;
  private string mobileField;
  private string msgIdField;
  private string contentField;
  private string userIdField;
  private string extNumField;
  private string recvNumField;

  /// <remarks/>
  public int eprId
  {
   get
   {
    return this.eprIdField;
   }
   set
   {
    this.eprIdField = value;
   }
  }



  /// <remarks/>
  public string mobile
  {
   get
   {
    return this.mobileField;
   }
   set
   {
    this.mobileField = value;
   }
  }



  /// <remarks/>
  public string msgId
  {
   get
   {
    return this.msgIdField;
   }
   set
   {
    this.msgIdField = value;
   }
  }



  /// <remarks/>
  public string content
  {
   get
   {
    return this.contentField;
   }
   set
   {
    this.contentField = value;
   }
  }

  /// <remarks/>
  public string userId
  {
   get
   {
    return this.userIdField;
   }
   set
   {
    this.userIdField = value;
   }
  }

  /// <remarks/>
  public string extNum
  {
   get
   {
    return this.extNumField;
   }
   set
   {
    this.extNumField = value;
   }
  }

  /// <remarks/>
  public string recvNum
  {
   get
   {
    return this.recvNumField;
   }
   set
   {
    this.recvNumField = value;
   }
  }
 }

生成類之后注意一下數(shù)據(jù)類型需要根據(jù)需求做一些修改

接下來就開始寫第一個(gè)接口,最簡(jiǎn)單的直接接收字符串

  [HttpPost, Route("get/context")]
  public int getContext(context_ context)
  {
   bool result = false;
   //短信數(shù)據(jù)
   returnForm context_data = 
XmlSerializeUtil.Deserialize(typeof(returnForm), context.context) as returnForm;
   if (context_data != null && context_data.count > 0)
   {
    result = UpdateDB(context_data);
   }
   return result ? 100 : 500;
  }

這里我定義了一個(gè)類context_,調(diào)用之前寫的方法反序列化實(shí)體類,再寫入數(shù)據(jù)庫(kù)

第二個(gè)接口時(shí)接收請(qǐng)求中的xml(text/xml)

  [HttpPost, Route("get/context")]
  public int getContext(context_ context)
  {
   bool result = false;
   //短信數(shù)據(jù)
   returnForm context_data = XmlSerializeUtil.Deserialize(typeof(returnForm), 
HttpContext.Current.Request.InputStream) as returnForm;
   if (context_data != null && context_data.count > 0)
   {
    result = UpdateDB(context_data);
   }
   return result ? 100 : 500;
  }

這里讀取了請(qǐng)求中的內(nèi)容,HttpContext.Current.Request.InputStream

第三種是讀取文件

  [HttpPost, Route("get/context")]
  public int getContext(context_ context)
  {
   bool result = false;
   HttpFileCollection files = HttpContext.Current.Request.Files;
   foreach (string key in files.AllKeys)
   {
    HttpPostedFile file1 = files[key];
    file1.InputStream.ToString();
    returnForm context_data = 
XmlSerializeUtil.Deserialize(typeof(returnForm), file1.InputStream) as returnForm;
    if (context_data != null && context_data.count > 0)
    {
     result = UpdateDB(context_data);
    }
   }
   return result ? 100 : 500;
  }

遍歷文件內(nèi)容,獲取數(shù)據(jù)

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • .NET微信開發(fā)之PC 端微信掃碼注冊(cè)和登錄功能實(shí)現(xiàn)

    .NET微信開發(fā)之PC 端微信掃碼注冊(cè)和登錄功能實(shí)現(xiàn)

    這篇文章主要介紹了.NET微信開發(fā)之PC 端微信掃碼注冊(cè)和登錄功能實(shí)現(xiàn)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • EF?Core基礎(chǔ)入門教程

    EF?Core基礎(chǔ)入門教程

    這篇文章介紹了EF?Core的基礎(chǔ)入門教程,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • Entity Framework使用Code First模式管理事務(wù)

    Entity Framework使用Code First模式管理事務(wù)

    本文詳細(xì)講解了Entity Framework使用Code First模式管理事務(wù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • .NET實(shí)現(xiàn)倉(cāng)儲(chǔ)Repository(AI)的操作方法

    .NET實(shí)現(xiàn)倉(cāng)儲(chǔ)Repository(AI)的操作方法

    倉(cāng)儲(chǔ)模式是一種在應(yīng)用程序中使用的設(shè)計(jì)模式,它將數(shù)據(jù)訪問邏輯與業(yè)務(wù)邏輯分離,通過倉(cāng)儲(chǔ)接口和倉(cāng)儲(chǔ)實(shí)現(xiàn)類,您可以定義和實(shí)現(xiàn)數(shù)據(jù)的增刪改查操作,這篇文章主要介紹了.NET?實(shí)現(xiàn)倉(cāng)儲(chǔ)Repository(AI),需要的朋友可以參考下
    2023-09-09
  • js插件類庫(kù)組織與管理(基于asp.net管理)

    js插件類庫(kù)組織與管理(基于asp.net管理)

    在開發(fā)一個(gè)較大規(guī)模的網(wǎng)站,js插件類庫(kù)應(yīng)用的是相當(dāng)多。那么自然在一個(gè)頁(yè)面里就存在不少script和script相關(guān)的link標(biāo)記,這樣js組織與管理自然成了一大問題。
    2010-07-07
  • asp.net(c#)網(wǎng)頁(yè)跳轉(zhuǎn)七種方法小結(jié)

    asp.net(c#)網(wǎng)頁(yè)跳轉(zhuǎn)七種方法小結(jié)

    在asp.net下,經(jīng)常需要頁(yè)面的跳轉(zhuǎn),下面是具體的幾種方法。跳轉(zhuǎn)頁(yè)面是大部編輯語言中都會(huì)有的,正面我們來分別介紹一下關(guān)于.net中response.redirect sever.execute server.transfer 三種頁(yè)面跳轉(zhuǎn)的方法
    2009-11-11
  • ASP.NET MVC從控制器傳遞數(shù)據(jù)到視圖的四種方式詳解

    ASP.NET MVC從控制器傳遞數(shù)據(jù)到視圖的四種方式詳解

    本篇文章主要介紹了ASP.NET MVC從控制器傳遞數(shù)據(jù)到視圖的四種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • 如何使用Microsoft.Extensions.AI簡(jiǎn)化.NET中的AI集成

    如何使用Microsoft.Extensions.AI簡(jiǎn)化.NET中的AI集成

    Microsoft.Extensions.AI是一個(gè)創(chuàng)新的?.NET?庫(kù),它為平臺(tái)開發(fā)人員提供了一個(gè)內(nèi)聚的?C#?抽象層,簡(jiǎn)化了與大型語言模型(LLMs)和嵌入等AI服務(wù)的交互,本文給大家介紹如何使用Microsoft.Extensions.AI簡(jiǎn)化.NET中的AI集成,感興趣的朋友一起看看吧
    2024-11-11
  • asp.net 生成靜態(tài)頁(yè)筆記

    asp.net 生成靜態(tài)頁(yè)筆記

    asp.net 生成靜態(tài)頁(yè)筆記,需要在asp.net中生成靜態(tài)頁(yè)面的朋友可以參考下。
    2011-06-06
  • 初識(shí)ASP.NET Mvc5+EF7的奇妙之旅

    初識(shí)ASP.NET Mvc5+EF7的奇妙之旅

    這篇文章主要和大家一起感受ASP.NET Mvc5+EF7的奇妙之旅,從旅程中認(rèn)識(shí)了解.NET5框架,感興趣的小伙伴們可以參考一下
    2015-09-09

最新評(píng)論

明光市| 长葛市| 兴化市| 江达县| 东乌珠穆沁旗| 句容市| 松阳县| 德清县| 穆棱市| 方正县| 池州市| 新沂市| 洛阳市| 新宁县| 安庆市| 洞头县| 台南县| 改则县| 红河县| 千阳县| 蓬安县| 蓬溪县| 铜梁县| 西峡县| 安国市| 湛江市| 科尔| 平武县| 全南县| 同仁县| 济宁市| 渑池县| 辛集市| 连州市| 普兰县| 万年县| 通州区| 调兵山市| 海淀区| 温州市| 信阳市|