【发布时间】:2014-02-24 18:21:24
【问题描述】:
我需要向我的 Web API 应用程序中的控制器方法发送一个 uri,该方法具有以下签名:
public HttpResponseMessage PostXMLFile(string serialNum, string siteNum, XElement xElement)
或者应该是这样的:
public HttpResponseMessage PostXMLFile(string serialNum, string siteNum, List<XElement> xElements)
?
无论如何,如您所见,它不能只是 XML,还必须有 serialNum 和 siteNum 参数。
我假设 uri 看起来像这样:
http://<machineName>:<port>/api/<ControllerName>?serialNum=N&siteNum=N&xElement=<some flattened XML>
IOW,类似于:
http://Platypus:4242/api/Platypi?serialNum=2&siteNum=7&xElement=<xml bla bla </xml>
我说得对吗(关于需要在 URI 中放置什么)?
如果是这样,我如何在那里获得“一些扁平化的 XML”。是不是这样的:
string xml = Bla; //some XML as string
XMLSerializer xmlSerial = new XMLSerializer();
string serialized = xmlSerial.Serialize(xml);
...然后将序列化的内容附加到 URI 的末尾?或者我怎样才能做到这一点?
注意:作为 arg 传递的 XML 通常包含数百个 XML“记录”(元素数组?)
更新
这就是我想做的事情(幻想伪代码):
UriBuilder uriBuilder = new UriBuilder();
XMLSerializer xmlCereal = new XMLSerializer();
File xmlToSerialize = // Load XML from file
string xmlAsStr = xmlCereal.Serialize(xmlToSerialize);
uriBuilder.Query.Add(xmlAsStr);
// pass uri to the Web API Post method
...但不知道如何在现实中实现它。
更新 2
另外,我是否必须通过向 WebApiConfig 的 Register 方法添加一些内容来明确指定 XML 作为要在我的 Web API 中序列化的类型?我目前有这个,明确添加了 Json:
public static void Register(HttpConfiguration config, IWindsorContainer container)
{
MapRoutes(config);
RegisterControllerActivator(container);
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver();
}
我需要添加一个:
config.Formatters.XmlFormatter.UseXmlSerializer = true;
一行或几行也是?
【问题讨论】:
-
我认为这些格式化程序只是用于响应,例如从控制器方法发送回 XML 或 JSON
-
你能不能把XElement的参数改成字符串,然后做XElement.Parse()?
-
我真的需要发送一个完整的 XML 文件,所以我可能需要一个通用的 XElement 列表或其他东西。
-
如果你真的希望你的控制器方法接受 XElement 或 List
而不是 string 或 string[] 我不知道是否有任何开箱即用的东西可以做到这一点,但你可能能够创建一个自定义模型绑定器,然后将 ModelBinderAttribute 和您的自定义类型添加到您的方法中。 -
我真的不在乎它发送什么/数据类型;我只需要能够发送两个字符串参数和一个“一堆”XML。 IOW,如果有一种方法可以将 XML 文件序列化为字符串,并且可以在另一端对其进行解析,而无需跳过太多微小和锋利的箍,那就没问题了。
标签: c# xml-parsing asp.net-web-api xml-serialization uri