.net webapi 接收 xml 格式数据的三种情况
webapi 接收 xml 的三种方法
前段时间接到一个任务写一个小接口,要接收java端返回过来的短信xml数据。
刚拿到项目,我的第一想法是对方会以什么形式发送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[ ]]>标志,里面的内容是没有限制的(除了< 和 >)。继续讲思路,文档中只说了是post方法,所以我想到了三种可能:
- 对方通过form表单提交了一个xml文件,我需要用文件流(filestream)读取文件,并进行转化为实体类
- 对方通过post了一个字符串过来,我接收字符串并转化为实体类。
- 对方直接在请求里添加了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;
}
遍历文件内容,获取数据
.net webapi 接收 xml 格式数据的三种情况的更多相关文章
- .NET的JSON格式数据的三种转换方式
说明: 1..Net进行JSON格式的数据传递的时候,势必用到序列化和反序列化对象,总共有三种方式可是在.NET中实现序列化和反序列化的需求. 2.操作JSON的速度是:Json.net > M ...
- Controller接收处理json、xml格式数据
1.RequestBody接收json格式的数据,并直接转为对象. User.java使用lombok依赖包 @Data @AllArgsConstructor @NoArgsConstructor ...
- R语言XML格式数据导入与处理
数据解析 XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用的工具.它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强 ...
- WCF兼容WebAPI输出Json格式数据,从此WCF一举两得
问题起源: 很多时候为了业务层调用(后台代码),一些公共服务就独立成了WCF,使用起来非常方便,添加服务引用,然后简单配置就可以调用了. 如果这个时候Web站点页面需要调用怎么办呢? 复杂的XML , ...
- Android中解析XML格式数据的方法
XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...
- yii2 输出xml格式数据
作者:白狼 出处:http://www.manks.top/yii2_xml_response.html.html本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文 ...
- Android使用DOM生成和输出XML格式数据
Android使用DOM生成和输出XML格式数据 本文主要简单解说怎样使用DOM生成和输出XML数据. 1. 生成和输出XML数据 代码及凝视例如以下: try { DocumentBuilderFa ...
- iOS开发之解析XML格式数据
XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用 ...
- PHP生成和获取XML格式数据
在做数据接口时,我们通常要获取第三方数据接口或者给第三方提供数据接口,而这些数据格式通常是以XML或者JSON格式传输,本文将介绍如何使用PHP生成XML格式数据供第三方调用以及如何获取第三方提供的X ...
随机推荐
- java 日志脱敏框架 sensitive-新版本0.0.2-深度拷贝,属性为对象和集合的支持
项目介绍 日志脱敏是常见的安全需求.普通的基于工具类方法的方式,对代码的入侵性太强.编写起来又特别麻烦. 本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发. 用户也可以基于自己的实际需要, ...
- Ping--域名替换重要角色
Ping-问答解惑 一.ping的概念?目的? 答: (1)ping是:在探测主机与主机之间是否可以通信,建立连接:若是源主机在一定时间内收到应答,则证明主机可达,用户不受影响. (2)ping的最终 ...
- spring boot + easypoi两行代码excel导入导出
easypoi封装了poi让我们能够非常简单的实现Excel导出,Excel模板导出,Excel导入,Word模板导出等,具体可见官网:http://www.afterturn.cn/. 我这边实现了 ...
- 浅谈Android之Activity生命周期
Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的.今天我们就来详细地聊聊Ac ...
- Delphi TreeView 节点上下移动
调用方法 procedure TfrmDataImport.B_ExcelDownClick(Sender: TObject); begin UpDownTVItem(TV_Import, 2); e ...
- 加载配置文件-properties
Properties jdbcProp = new Properties(); jdbcProp.load(getClass().getResourceAsStream("/jdbc.pro ...
- 2018-2019-2 网络对抗技术 20165304 Exp6 信息搜集与漏洞扫描
2018-2019-2 网络对抗技术 20165304 Exp6 信息搜集与漏洞扫描 原理与实践说明 1.实践原理 信息搜集:渗透测试中首先要做的重要事项之一,搜集关于目标机器的一切信息 间接收集 D ...
- Java学习随笔(1)--groovy爬虫
package com.fan import com.fission.source.httpclient.ApiLibraryimport com.fission.source.httpclient. ...
- 《Java开发学习大纲文档》V6.0(已经不公布了,请查看第七版)
<Java开发大纲学习文档第六版>简介: 有需要的私聊作者QQ:253173641.
- Android Studio添加aar依赖的两种方式
1 android{ repositories { flatDir { dirs 'libs' } } } dependencies { implementation fileTree(include ...