如何发送XML的URI中张贴到Web API的应用程序? [英] How to send XML in a URI for posting to a Web API app?

查看:216
本文介绍了如何发送XML的URI中张贴到Web API的应用程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一个URI发送到控制器的方法,其中有如下的签名我的我的Web API的应用程序:

 公开的Htt presponseMessage PostXMLFile(字符串SERIALNUM,串siteNum,的XElement的XElement)

还是应这个代替:

 公开的Htt presponseMessage PostXMLFile(字符串SERIALNUM,串siteNum,列表与LT;&的XElement GT; xElements)

总之,你可以看到,它不可能是的只是的XML的,但必须有SERIALNUM和siteNum ARGS了。

我假设URI可以是这样的:

<$p$p><$c$c>http://<machineName>:<port>/api/<ControllerName>?serialNum=N&siteNum=N&xElement=<some扁平XML&GT;

IOW,是这样的:

 的http://鸭嘴兽:4242 / API / Platypi SERIALNUM = 2及siteNum = 7&放大器;的XElement =&LT; XML BLA BLA&LT; / XML&GT;

我的权利(约需要放置在URI是什么)?

如果是这样,我怎么说,有些扁平化XML在那里。它是这样的:

 字符串XML =布拉; //一些XML作为字符串
XMLSerializer的xmlSerial =新的XMLSerializer();
串序列= xmlSerial.Serialize(XML);

...然后钉的序列化的内容到URI的结束?或者,我怎么能做到这一点?

注:为ARG通常包含数以百计的XML记录通过XML

(元素的数组?)

更新

这是我想做什么就能做(幻想伪code):

  UriBuilder uriBuilder =新UriBuilder();
XMLSerializer的xmlCereal =新的XMLSerializer();
从文件fil​​e xmlToSerialize = //加载XML
字符串xmlAsStr = xmlCereal.Serialize(xmlToSerialize);
uriBuilder.Query.Add(xmlAsStr);
// URI传递到Web API Post方法

...但不要只是知道如何实现,在现实中。

更新2

另外,我必须明确指定XML作为一种类型做加入的东西WebApiConfig的注册方法,在我的Web API被序列化?我现在有这一点,使用JSON explcitly补充说:

 公共静态无效的注册(HttpConfiguration配置,IWindsorContainer容器)
{
    MapRoutes(配置);
    RegisterControllerActivator(容器);
    config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented;
    config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
        新CamelCasePropertyNamesContractResolver();
}

我是否需要添加一个:

  config.Formatters.XmlFormatter.UseXmlSerializer = TRUE;

一行或几行,太?


解决方案

我会后这是因为它是一个有点难以在评论中描述的答案

 公开的Htt presponseMessage PostXMLFile(字符串SERIALNUM,串siteNum,字符串的xmlString)
{
    VAR的XElement = XElement.Parse(的xmlString);
    //你的XElement做什么现在;
}

然后,你可以打电话给你的方法,如:

<$p$p><$c$c>http://<machineName>:<port>/api/<ControllerName>?serialNum=2&siteNum=7&xmlString=<xml喇嘛喇嘛&LT; / XML&GT;

(但注意编码)

至于添加XML到您的网址,因为它只是一个字符串,你可以把它读作正常的文本并将其追加到您的网址。

如果你想接受元素的列表,我相信你可以改变你的控制器方法

 公开的Htt presponseMessage PostXMLFile(字符串SERIALNUM,串siteNum,[ModelBinder的]列表&LT;串GT; xmlStrings)
{
    的foreach(在xmlStrings VAR的xmlString)
    {
       VAR的XElement = XElement.Parse(的xmlString);
       //你的XElement做什么现在;
    }
}

和您的网址看起来像

<$p$p><$c$c>http://<machineName>:<port>/api/<ControllerName>?serialNum=2&siteNum=7&xmlStrings=<xml BLA BLA&LT; / XML&GT;&安培; xmlStrings =&LT; XML更BLA BLA&LT; / XML&GT;&安培; xmlStrings =&LT; XML更BLA BLA&LT; / XML&GT;

这并不完全意义的,我说,你会想从文件加载文本,然后连载它为XML有线传输当两个文件的内容和XML已经系列化。你不需要到你的控制器方法接收XML字符串创建任何XDocuments或XElements。

I need to send a uri to a Controller method in my my Web API app which has the following signature:

public HttpResponseMessage PostXMLFile(string serialNum, string siteNum, XElement xElement)

Or should it be this instead:

public HttpResponseMessage PostXMLFile(string serialNum, string siteNum, List<XElement> xElements)

?

Anyway, as you can see, it can't be just the XML, but must have the serialNum and siteNum args, too.

I'm assuming the uri can look like this:

http://<machineName>:<port>/api/<ControllerName>?serialNum=N&siteNum=N&xElement=<some flattened XML>

IOW, something like:

http://Platypus:4242/api/Platypi?serialNum=2&siteNum=7&xElement=<xml bla bla </xml>

Am I right (about what needs to be placed in the URI)?

If so, how do I get that "some flattened XML" there. Is it something like this:

string xml = Bla; //some XML as string
XMLSerializer xmlSerial = new XMLSerializer();
string serialized = xmlSerial.Serialize(xml);

...and then tack the contents of serialized onto the end of the URI? Or how can I accomplish this?

Note: the XML passed as an arg will usually contain hundreds of XML "records" (arrays of elements?)

UPDATE

This is what I would like to be able to do (fantasy pseudocode):

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

...but don't know just how to implement that in reality.

UPDATE 2

Also, do I have to explicitly specify XML as a type to be serialized in my Web API by doing adding something to WebApiConfig's Register method? I currently have this, with Json explcitly added:

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();
}

Do I need to add a:

config.Formatters.XmlFormatter.UseXmlSerializer = true;

line or lines, too?

解决方案

I'll post this as an answer as it's a bit hard to describe in comments

public HttpResponseMessage PostXMLFile(string serialNum, string siteNum, string xmlString)
{
    var xElement = XElement.Parse(xmlString);
    // do whatever now with your xElement;
}

Then you'd be able to call your method like:

http://<machineName>:<port>/api/<ControllerName>?serialNum=2&siteNum=7&xmlString=<xml bla bla </xml>

(though watch out for encoding)

As for adding the XML to your url, because it's just a string, you can just read it as normal text and append it to your url.

If you want to accept lists of elements, I believe you can change your controller method to

public HttpResponseMessage PostXMLFile(string serialNum, string siteNum, [ModelBinder]List<string> xmlStrings)
{
    foreach(var xmlString in xmlStrings)
    {
       var xElement = XElement.Parse(xmlString);
       // do whatever now with your xElement;
    }
}

and your url will look something like

http://<machineName>:<port>/api/<ControllerName>?serialNum=2&siteNum=7&xmlStrings=<xml bla bla </xml>&xmlStrings=<xml more bla bla </xml>&xmlStrings=<xml even more bla bla </xml>

It doesn't quite make sense to me that you would want to load text from a file and then 'serialize' it to XML for wire transmission when both the file contents and xml are already serialized. You don't need to create any XDocuments or XElements until your controller method receives the xml string.

这篇关于如何发送XML的URI中张贴到Web API的应用程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆