.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数据。
刚拿到项目,我的第一想法是对方会以什么形式发送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;
}

遍历文件内容,获取数据

总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对华域联盟的支持。

您可能感兴趣的文章:ASP.net WebAPI 上传图片实例Asp.net core WebApi 使用Swagger生成帮助页实例ASP.NET Core 2.0 WebApi全局配置及日志实例ASP.NET WebAPi(selfhost)实现文件同步或异步上传浅谈ASP.Net Core WebApi几种版本控制对比为ASP.NET MVC及WebApi添加路由优先级在CentOS6.5上使用Jexus安装部署ASP.NET MVC4和WebApiasp.net core 2.0 webapi集成signalr(实例讲解)ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据的传递asp.net mvc webapi 实用的接口加密方法示例

.net
webapi
接收

相关文章
基于.NET BitmapImage 内存释放问题的解决方法详解本篇文章是对.NET BitmapImage 内存释放问题的解决方法进行了详细的分析介绍,需要的朋友参考下 2013-05-05
ASP.Net页面生成饼图实例这篇文章主要介绍了ASP.Net页面生成饼图的方法,实例讲述了生成普通饼图与增加边线的方法,具有不错的参考借鉴价值,需要的朋友可以参考下 2014-11-11
asp.net mvc 动态编译生成Controller的方法本篇文章主要介绍了asp.net mvc 动态编译生成Controller的方法,具有一定的参考价值,有兴趣的可以了解一下
2017-08-08
ASP.NET Core AutoWrapper 自定义响应输出实现这篇文章主要介绍了ASP.NET Core AutoWrapper 自定义响应输出实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 2020-08-08
ASP.NET笔记之Calender的使用说明在Calender中,所有可选择的符号会显示下划线,这是因为它们在浏览器都会呈现为链接。如果让用户可以选择某天、月、周,必须设置SelectionMode属性
2013-04-04
C#.NET发送邮件的实例代码这篇文章介绍了C#.NET发送邮件的实例代码,有需要的朋友可以参考一下,希望对你有所帮助 2013-07-07
RLCSS分词系统更新下载RLCSS分词系统更新下载… 2007-03-03
asp.net基于session实现购物车的方法这篇文章主要介绍了asp.net基于session实现购物车的方法,结合实例形式较为详细的分析了asp.net使用session存储临时数据实现购物车功能的相关技巧,需要的朋友可以参考下 2015-11-11
asp.net 利用NPOI导出Excel通用类的方法 本篇文章主要介绍了asp.net 利用NPOI导出Excel通用类的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2017-06-06
Asp.Net(C#)自动执行计划任务的程序实例分析分享这篇文章主要介绍了Asp.Net(C#)自动执行计划任务的程序实例分析,有需要的朋友可以参考一下 2014-01-01

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。