Rest Web Api XML 绑定 - Asp.Net MVC

卡约圣安娜

我正在rest asp net web api中创建一个post方法来通过json或xml接收数据。我需要处理无法更改的特定 xml 结构:

<data>
 <t>
    <id>sample string 1</id>
    <cnpj>sample string 2</cnpj>
    <datatransacao>sample string 3</datatransacao>
    <valorarredondado>sample string 4</valorarredondado>
    <grupo>sample string 5</grupo>
    <meiopagamento>sample string 6</meiopagamento>
    <parcelas>sample string 7</parcelas>
    <cpf>sample string 8</cpf>
    <nome>sample string 9</nome>
    <email>sample string 10</email>
    <codoperador>sample string 11</codoperador>
  </t>
  <t>
    <id>sample string 1</id>
    <cnpj>sample string 2</cnpj>
    <datatransacao>sample string 3</datatransacao>
    <valorarredondado>sample string 4</valorarredondado>
    <grupo>sample string 5</grupo>
    <meiopagamento>sample string 6</meiopagamento>
    <parcelas>sample string 7</parcelas>
    <cpf>sample string 8</cpf>
    <nome>sample string 9</nome>
    <email>sample string 10</email>
    <codoperador>sample string 11</codoperador>
  </t>
</data>

为了实现这一点,我创建了一个方法:

[HttpPost]
public HttpResponseMessage Post([FromUri] string Token, [FromBody] List<t> data)
{
    return Request.CreateResponse(HttpStatusCode.OK, "");
}

它基本上是一个令牌和一个 t 列表

public class t
{
    public string id { get; set; }
    public string cnpj { get; set; }
    public string datatransacao { get; set; }
    public string valorarredondado { get; set; }
    public string grupo { get; set; }
    public string meiopagamento { get; set; }
    public string parcelas { get; set; }
    public string cpf { get; set; }
    public string nome { get; set; }
    public string email { get; set; }
    public string codoperador { get; set; }
}

有了这个,我在测试时得到了 data 参数的空值。一切都正确绑定,仅当发送:

<ArrayOfT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <t>
    <id>sample string 1</id>
    <cnpj>sample string 2</cnpj>
    <datatransacao>sample string 3</datatransacao>
    <valorarredondado>sample string 4</valorarredondado>
    <grupo>sample string 5</grupo>
    <meiopagamento>sample string 6</meiopagamento>
    <parcelas>sample string 7</parcelas>
    <cpf>sample string 8</cpf>
    <nome>sample string 9</nome>
    <email>sample string 10</email>
    <codoperador>sample string 11</codoperador>
  </t>
  <t>
    <id>sample string 1</id>
    <cnpj>sample string 2</cnpj>
    <datatransacao>sample string 3</datatransacao>
    <valorarredondado>sample string 4</valorarredondado>
    <grupo>sample string 5</grupo>
    <meiopagamento>sample string 6</meiopagamento>
    <parcelas>sample string 7</parcelas>
    <cpf>sample string 8</cpf>
    <nome>sample string 9</nome>
    <email>sample string 10</email>
    <codoperador>sample string 11</codoperador>
  </t>
</ArrayOfT>

我的 api 目前设置为使用 Xmlserializer

config.Formatters.XmlFormatter.UseXmlSerializer = true;

在我的测试中,我设法用代码自己序列化了 xml:

var postStream = Request.Content.ReadAsStreamAsync().Result;
postStream.Seek(0, SeekOrigin.Begin);
string postBodyString = new StreamReader(postStream).ReadToEnd();

StringReader stringReader = new StringReader(postBodyString);
XmlSerializer serializer = new XmlSerializer(typeof(List<t>), new XmlRootAttribute("data"));
List<t> ListOfT = (List<t>)serializer.Deserialize(stringReader);

我想知道是否有可能使框架仅考虑该方法的签名与该 xml 绑定所有内容。到目前为止,我无法做到这一点。

谢谢

穆克什·莫德瓦迪亚

再增加一门课

[XmlRoot(ElementName = "data")]
public class Data {
    [XmlElement(ElementName = "t")]
    public List<t> data { get; set; }
}

将其用作方法的参数。它应该正确绑定。

[HttpPost]
public HttpResponseMessage Post([FromUri] string Token, [FromBody] Data data)

还将 XmlRoot 属性添加到您的 t 类

[XmlRoot(ElementName = "t")]
public class t
{
    public string id { get; set; }
    public string cnpj { get; set; }
    ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC Web应用到REST API

来自分类Dev

ASP.NET MVC Web API基本帖子未绑定Angular

来自分类Dev

ASP.NET MVC / Web API模型绑定项到集合

来自分类Dev

使用asp.net mvc 中的web api 从服务Angular 6 调用REST 的POST 方法

来自分类Dev

ASP.net MVC Web API + Android

来自分类Dev

ASP.net MVC Web API + Android

来自分类Dev

ASP.NET MVC和WEB API

来自分类Dev

Angularjs + ASP.NET MVC + ASP.NET Web API

来自分类Dev

未捕获的RangeError:超出最大调用堆栈大小-使用Web Api的Asp.net Mvc DropDown绑定

来自分类Dev

ASP.NET Web API中的参数绑定

来自分类Dev

asp.net Web api-模型绑定列表参数

来自分类Dev

ASP.NET Web API中的参数绑定

来自分类Dev

使用URL绑定来自Web服务的数据并将其与类绑定-ASP.NET MVC 5

来自分类Dev

Web Api MVC绑定FormDataCollection

来自分类Dev

如何从Web API调用ASP.NET Core Web MVC

来自分类Dev

如何从Web API调用ASP.NET Core Web MVC

来自分类Dev

使用 C# ASP.NET MVC 调用 REST API

来自分类Dev

asp.net中的oData,REST和Web API

来自分类Dev

ASP.NET Web API REST服务:HTTP错误405

来自分类Dev

asp.net中的oData,REST和Web API

来自分类Dev

ASP.NET MVC Web Api:服务器端的application / xml PUT请求主体为null

来自分类Dev

ASP.NET MVC 5-JSON-(动态?)模型绑定-REST服务-Webhooks-Chargebee

来自分类Dev

在ASP.NET MVC Web Api中返回Json

来自分类Dev

ASP.NET MVC Web API请求限制

来自分类Dev

ASP.NET vNext MVC 6 Web Api的帮助页面

来自分类Dev

ASP.NET MVC 4 / MVVM / Web API的良好结构?

来自分类Dev

使用Web API的ASP.NEt MVC返回Razor视图

来自分类Dev

ASP.NET MVC Web Api帮助页面路由

来自分类Dev

缓存ASP.NET MVC Web API结果