xml - 如何在.net核心的节点中发布带有前缀的xml输入
问题描述
我需要将包含根节点中前缀的 xml 发布到控制器。这是我需要发布的xml:
<?xml version="1.0" encoding="UTF-8"?>
<star:SecuredFiles xmlns:star="http://www.starstandard.org/STAR/5">
<ED>2019-05-07T16:39:13Z</ED>
<AID/>
<SNC>U8</SNC>
<SID>sample</SID>
<RID>F37C6B44-FCA3-4313-A1E3-42EDB131FD17</RID>
<FileURI>9928645r01.pdf</FileURI>
<ServerGuid>PRUCTIONS</ServerGuid>
</star:SecuredFiles>
在控制器我有这样的代码:
[HttpPost]
public async Task<IActionResult> Post([FromBody]SecuredFiles secureFile)
{
----------
}
我有这样的模型类:
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.starstandard.org/STAR/5")]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.starstandard.org/STAR/5", IsNullable = false)]
public class SecuredFiles
{
public DateTime ED { get; set; }
public string AID { get; set; }
public string SNC { get; set; }
public string SID { get; set; }
public string RID { get; set; }
public string FileURI { get; set; }
public string ServerGuid { get; set; }
}
现在,当我尝试将此 xml 发布到控制器时,我在属性中得到了 null。
我的 Startup.cs 看起来像:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(opt =>
{
opt.Filters.Add(typeof(ValidateModelStateAttribute)); // by type
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
.AddXmlSerializerFormatters()
.AddXmlDataContractSerializerFormatters();
------
}
有人可以帮忙修复它吗?
谢谢,
解决方案
我已经通过在控制器上使用这种方法解决了这个问题..
var body = string.Empty;
SecuredFiles secureFile = new SecuredFiles(); ;
Request.Body.Seek(0, SeekOrigin.Begin);
using (var reader = new StreamReader(Request.Body))
{
body = reader.ReadToEnd();
}
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(body);
var nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("star", "http://www.starstandard.org/STAR/5");
string xpath = "star:SecuredFiles";
var nodes = xmlDoc.SelectNodes(xpath, nsmgr);
// Read data from STAR xml
foreach (XmlNode childrenNode in nodes)
{
secureFile.AID = childrenNode.SelectSingleNode("//AID").InnerText;
secureFile.ED = childrenNode.SelectSingleNode("//ED").InnerText;
secureFile.FileURI = childrenNode.SelectSingleNode("//FileURI").InnerText;
secureFile.RID = childrenNode.SelectSingleNode("//RID").InnerText;
secureFile.ServerGuid = childrenNode.SelectSingleNode("//ServerGuid").InnerText;
secureFile.SID = childrenNode.SelectSingleNode("//SID").InnerText;
secureFile.SNC = childrenNode.SelectSingleNode("//SNC").InnerText;
}
谢谢,
推荐阅读
- reactjs - 为什么排序时元素不在正确的位置?
- ruby-on-rails - 控制器中的 ActionController::UnknownFormat (#index)
- javascript - 从动态添加的 onClick 事件调用时,Javascript CSS 显示不起作用
- asp.net-core - 特定 cookie 的 asp.net 核心 Cookie 策略选项覆盖
- go - 如何在 Go 中使用 Minio 预签名 URL
- node.js - 在 Kubernetes 中将 Reactjs 应用程序连接到 Express 服务器和 DocumentDB (AWS MongoDB)
- c - C 函数阴影:为什么这个例子不起作用?
- oauth-2.0 - 如何将我的 OAuth 会话返回给 Bixby?
- r - 对于R中的新对象,如何通过下标赋值?
- c - C程序打印直角三角形