欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.net webapi接收xml格式數據的3種情況小結

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

前言

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

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

webapi 接收 xml 的三種方法

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

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

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

思路

這個xml的基本知識我就不一一介紹了,簡單說一下<![CDATA[ ]]>標志,里面的內容是沒有限制的(除了< 和 >)。繼續(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;
   }
  }
 }

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

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

  [HttpPost, Route("get/context")]
  public int getContext(context_ context)
  {
   bool result = false;
   //短信數據
   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_,調用之前寫的方法反序列化實體類,再寫入數據庫

第二個接口時接收請求中的xml(text/xml)

  [HttpPost, Route("get/context")]
  public int getContext(context_ context)
  {
   bool result = false;
   //短信數據
   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;
  }

這里讀取了請求中的內容,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;
  }

遍歷文件內容,獲取數據

總結

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

相關文章

  • asp.net AJAX實現(xiàn)無刷新獲得數據

    asp.net AJAX實現(xiàn)無刷新獲得數據

    提供一個使用AJAX實現(xiàn)無刷新判斷注冊用戶名是否被注冊的代碼:
    2008-11-11
  • aspx超強木馬查殺與防范(web網馬)

    aspx超強木馬查殺與防范(web網馬)

    下面代碼是一個aspx超強木馬,功能很多,大家在服務器上見到一定要小心
    2013-12-12
  • 基于ASP.NET實現(xiàn)驗證碼生成詳解

    基于ASP.NET實現(xiàn)驗證碼生成詳解

    這篇文章主要為大家詳細介紹了如何利用ASP.NET實現(xiàn)驗證碼的生成,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • .NetCore使用MailKit發(fā)送和接收郵件的方法

    .NetCore使用MailKit發(fā)送和接收郵件的方法

    MailKit是一個開源的.NET庫,提供了對SMTP、POP3和IMAP的訪問,使得發(fā)送和接收電子郵件變得簡單,下面是一個基本的示例,展示了如何使用MailKit來發(fā)送和接收郵件,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • 深入淺析WinForm 進程、線程及區(qū)別介紹

    深入淺析WinForm 進程、線程及區(qū)別介紹

    進程是一個具有獨立功能的程序關于某個數據集合的一次運行活動。線程,有時被稱為輕量級進程(Lightweight Process,LWP),是程序執(zhí)行流的最小單元。這篇文章主要介紹了WinForm 進程、線程的相關資料,需要的朋友可以參考下
    2016-09-09
  • asp.net 簡單單點登錄技術分析

    asp.net 簡單單點登錄技術分析

    單點登錄,又叫SSO(Single Sign On)。在一些cms或者OA中比較常用到這種登錄模式,目的是為防止重復登錄。而其實現(xiàn)原理也頗為簡單,只要Cache的形式就可以實現(xiàn),這里只用于簡單記錄下,呵呵……
    2011-02-02
  • 在WinForm和WPF中使用GMap.Net地圖插件簡單教程

    在WinForm和WPF中使用GMap.Net地圖插件簡單教程

    GMap.NET是一個強大、免費、跨平臺、開源的.NET控件,它在Windows Forms 和WPF環(huán)境中能夠使用來自Google, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac等地圖,下面看一下使用方法
    2013-12-12
  • .Net Core限流的實現(xiàn)示例

    .Net Core限流的實現(xiàn)示例

    限流能夠很好的控制住一個客戶端訪問服務器資源地址的請求次數,本文主要介紹了.Net Core限流的實現(xiàn)示例,感興趣的可以了解一下
    2021-07-07
  • ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)

    ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)

    要想在ASP.NET中操作SQL數據庫首先需要在WebConfig中配置數據庫連接字符串,之后在.cs文件中獲取連接字符串,具體的配置及獲取方法如下,感興趣的朋友可以參考下哈
    2013-06-06
  • 深入解讀ASP.NET Core身份認證過程實現(xiàn)

    深入解讀ASP.NET Core身份認證過程實現(xiàn)

    這篇文章主要介紹了深入解讀ASP.NET Core身份認證過程實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10

最新評論