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

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

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

前言

ASP.NET Web API是​​一個框架,可以很容易構建達成了廣泛的HTTP服務客戶端,包括瀏覽器和移動設備。是構建RESTful應用程序的理想平臺的.NET框架。

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

webapi 接收 xml 的三種方法

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

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

我一開始拿到手上的是一串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[回復內(nèi)容]]> </content> 
  <userId>id</userId> 
  <extNum>擴展號</extNum> 
  <recvNum/> 
 </pushSmsForm> 
 <pushSmsForm> 
  <eprId>0</eprId> 
  <mobile>13560739261</mobile> 
  <msgId>30217001</msgId> 
  <content> <![CDATA[回復內(nèi)容]]> </content> 
  <userId>id</userId> 
  <extNum>擴展號</extNum> 
  <recvNum/> 
 </pushSmsForm> 
 </list> 
</returnForm>

思路

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

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

先構建兩個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ù)需求做一些修改

接下來就開始寫第一個接口,最簡單的直接接收字符串

  [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;
  }

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

第二個接口時接收請求中的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;
  }

這里讀取了請求中的內(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ù)

總結

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

相關文章

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

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

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

    EF?Core基礎入門教程

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

    Entity Framework使用Code First模式管理事務

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

    .NET實現(xiàn)倉儲Repository(AI)的操作方法

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

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

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

    asp.net(c#)網(wǎng)頁跳轉七種方法小結

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

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

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

    如何使用Microsoft.Extensions.AI簡化.NET中的AI集成

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

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

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

    初識ASP.NET Mvc5+EF7的奇妙之旅

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

最新評論

德安县| 正定县| 祥云县| 厦门市| 大安市| 林州市| 盱眙县| 巫山县| 马山县| 镇雄县| 大关县| 宜良县| 平罗县| 九江县| 葫芦岛市| 莱阳市| 普宁市| 永福县| 汕头市| 通渭县| 灌云县| 清河县| 堆龙德庆县| 简阳市| 长葛市| 习水县| 英德市| 招远市| 新平| 鄂尔多斯市| 乌苏市| 尚义县| 钟山县| 山东省| 定边县| 庆云县| 宜都市| 罗源县| 洪雅县| 呼伦贝尔市| 泌阳县|