1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
      <output id="hzk7v"></output>
    2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
    3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

      .net webapi接收xml格式数据的3种情况小结

       更新时间£º2019年02月15日 11:24:07   作者£º野菊花   我要评论

      这篇文章主要给大家总结介绍了关于.net webapi接收xml格式数据的3种情况£¬文中通过示例代码介绍的非常详细£¬对大家的学习或者工作具有一定的参考学习价值£¬需要的朋友们下面来一起学习学习吧

      前言

      ASP.NET Web API是​​一个框架£¬可以很容易构建达成了广泛的HTTP服务客户端£¬包括浏览器和移动设备¡£是构建RESTful应用程序的理想平台的.NET框架¡£

      本文主要给大家介绍了关于.net webapi接收xml格式数据的相关内容£¬下面?#23433;?#22810;说了£¬来一起看看详细的介绍吧

      webapi 接收 xml 的三种方法

      前段时间接到一个任务写一个小接口£¬要接收java端返回过来的短信xml数据¡£

      刚拿到项目£¬我的第一想法是对?#20132;?#20197;什么形式发送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[ ]]>标志£¬里面的内容是没有限制的(除了< 和 >)¡£继续?#33756;?#36335;£¬文档中只说了是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?#28304;?#30340;功能xml生成类£¨编辑-->选择性?#31243;?->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;
        }

      遍历文件内容£¬获取数据

      总结

      以上就是这篇文章的全部内容了£¬希望本文的内容对大家的学习或者工作具有一定的参考学习价值£¬如果有疑问大家可以留言交流£¬谢谢大家对脚本之家的支持¡£

      相关文章

    4. asp.net 控件验证 FCKeditor

      asp.net 控件验证 FCKeditor

      FCKEditor是一个很不错的在线编辑器£¬可称得上完美£¬但是它有一个问题£¬就是在使用RequiredFieldValidator进行验证的时候£¬?#35789;?#20869;容不为空£¬也需要点击两次才能完成
      2009-06-06
    5. ASP.NE网站发布注意事项简析

      ASP.NE网站发布注意事项简析

      ASP.NET网站部署到IIS中的关键点,本文介绍了一些ASP.NE网站在发布是需要注意事项£¬需要了解的朋友可以参考下
      2012-12-12
    6. asp.net下DataSet.WriteXml(String)与(Stream)的区别

      asp.net下DataSet.WriteXml(String)与(Stream)的区别

      asp.net下DataSet.WriteXml(String)与(Stream)的区别...
      2007-04-04
    7. 最新评论

      常用在线小工具

      3dÊÔ»úºÅÖвÊÍø

        1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
          <output id="hzk7v"></output>
        2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
        3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>

            1. <output id="hzk7v"><pre id="hzk7v"><address id="hzk7v"></address></pre></output>
              <output id="hzk7v"></output>
            2. <nav id="hzk7v"><i id="hzk7v"><em id="hzk7v"></em></i></nav>
            3. <listing id="hzk7v"><delect id="hzk7v"><em id="hzk7v"></em></delect></listing>