.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 ...
随机推荐
- 转发: 关于ST MCU的UID详细说明
https://www.stmcu.org.cn/article/id-327990 ST MCU芯片中的绝大部分都内置一串96位唯一标识码[unique ID].时不时有人问起这个东西,尤其最近感, ...
- arcgis10.2 sde配置
本机配置好oracle11g server 64位+client 32位.
- SSM的搭建
1.首先是工具的准备. eclipse jdk1.7 maven 3.5.4 tomcat 8.5 2.工具环境的搭建 首先,new建立选择maven project工程,勾选simple proje ...
- [Nginx]Nginx的一些概念
Nginx 关注:一.性能 1)高并发下资源不浪费在处理进程切换休眠等,保持高的吞吐量 2)高并发下如何保持平均时延低 3)提高网络效率,例如长连接代替短链接,高压缩算法提高信息量,使用缓存减少 ...
- [原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(四) -- 安装crowd 3.1.2
[原创] debian 9.3 搭建Jira+Confluence+Bitbucket项目管理工具(四) -- 安装crowd 3.1.2 本来已经安装完毕, 并使用Jira集成的OAuth账户管理, ...
- 2018-2019-2 20175213实验一 《Java开发环境的熟悉》实验报告
第一部分实验要求:1 建立“自己学号exp1”的目录2 在“自己学号exp1”目录下建立src,bin等目录3 javac,java的执行在“自己学号exp1”目录4 提交 Linux或Window或 ...
- python学习Day11 函数的参数列表
复习 什么是函数? 具体特定功能的代码块 - 特定功能代码作为一个整体,并给该整体命名,就是函数 函数的优点 : 1.减少代码的冗余,2.结构清晰,可读性强 3.具有复用性,开发效率高,维护成本高 如 ...
- 2、数据结构 proxy 代理 reflect 反射
增删改查 1.set (数组) 2.map (对象 key value) 数据结构横向对比 map.set('t',1) arr.push({t:1}) set.add({t:1}) arr.push ...
- SpringCloud-day05-服务调用Ribbon
6.服务调用Ribbon 6.1Ribbon简介 前面讲了eureka服务注册与发现,但是结合eureka集群的服务调用并没有谈到.这里就要用到Ribbon,结合eureka,来实现服务的调用: Ri ...
- java第一天 数据类型、变量的命名、类型的转换
数据类型 /* 数据类型:Java是一种强类型语言,针对每一种数据都给出了明确的数据类型 数据类型分类: A:基本数据类型 B:引用数据类型(类,接口,数组) 基本数据类型:4类8种 A:整数 字节 ...