.net webapi接收xml格式數(shù)據(jù)的3種情況小結(jié)
前言
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方法,所以我想到了三種可能:
- 對(duì)方通過form表單提交了一個(gè)xml文件,我需要用文件流(filestream)讀取文件,并進(jìn)行轉(zhuǎn)化為實(shí)體類
- 對(duì)方通過post了一個(gè)字符串過來,我接收字符串并轉(zhuǎn)化為實(shí)體類。
- 對(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ì)腳本之家的支持。
- ASP.net WebAPI 上傳圖片實(shí)例
- Asp.net core WebApi 使用Swagger生成幫助頁(yè)實(shí)例
- ASP.NET Core 2.0 WebApi全局配置及日志實(shí)例
- ASP.NET WebAPi(selfhost)實(shí)現(xiàn)文件同步或異步上傳
- 淺談ASP.Net Core WebApi幾種版本控制對(duì)比
- 為ASP.NET MVC及WebApi添加路由優(yōu)先級(jí)
- 在CentOS6.5上使用Jexus安裝部署ASP.NET MVC4和WebApi
- asp.net core 2.0 webapi集成signalr(實(shí)例講解)
- ASP.Net WebAPI與Ajax進(jìn)行跨域數(shù)據(jù)交互時(shí)Cookies數(shù)據(jù)的傳遞
- asp.net mvc webapi 實(shí)用的接口加密方法示例
相關(guān)文章
.NET微信開發(fā)之PC 端微信掃碼注冊(cè)和登錄功能實(shí)現(xiàn)
這篇文章主要介紹了.NET微信開發(fā)之PC 端微信掃碼注冊(cè)和登錄功能實(shí)現(xiàn)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
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)的操作方法
倉(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
asp.net(c#)網(wǎng)頁(yè)跳轉(zhuǎn)七種方法小結(jié)
在asp.net下,經(jīng)常需要頁(yè)面的跳轉(zhuǎn),下面是具體的幾種方法。跳轉(zhuǎn)頁(yè)面是大部編輯語(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ù)到視圖的四種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01
如何使用Microsoft.Extensions.AI簡(jiǎn)化.NET中的AI集成
Microsoft.Extensions.AI是一個(gè)創(chuàng)新的?.NET?庫(kù),它為平臺(tái)開發(fā)人員提供了一個(gè)內(nèi)聚的?C#?抽象層,簡(jiǎn)化了與大型語(yǔ)言模型(LLMs)和嵌入等AI服務(wù)的交互,本文給大家介紹如何使用Microsoft.Extensions.AI簡(jiǎn)化.NET中的AI集成,感興趣的朋友一起看看吧2024-11-11

