Parameter中的xml字符串部分传递给API

时间:2018-03-16 09:57:25

标签: xml rest web-services asp.net-web-api parameter-passing

在Web API调用期间将xml字符串作为参数传递给查询字符串时遇到问题。我知道它由于特殊的字符表示。但不知道如何解决它。 我需要传递的xml字符串是:

<tagName name="red" query="tableName &lt;&gt; ''" requestId="requestorName:sessionID" />

但在服务方面,只有传递的东西是

<tagName name="red" query="tableName

因为传递的字符串被记录为xml,我不能用&lt;&lt; lt&lt;&lt;&lt;和&amp; gt与&gt;。请给我一个解决方案。

我将字符串附加到客户端,如下所示:

WebClient client = new WebClient();
client.Headers[HttpRequestHeader.ContentType] = "application/xml";
var param = new NameValueCollection();
param.Add("tagName", Content);   //Content contains the xml string to be passed
client.QueryString = param;
client.DownloadString("http://localhost:8000/api/method");

我有一个Web API,如下所示

[HttpGet]
[Route("api/getquery")]
public HttpResponseMessage method(string tagName)
{
  //funtions to perform
}

Web api捕获部分字符串。

1 个答案:

答案 0 :(得分:0)

找到我自己的查询的解决方案..:D

实际上我没有考虑的是当我们向查询字符串添加一些参数时,完整的http请求生成如下。

WebClient client = new WebClient();
client.Headers[HttpRequestHeader.ContentType] = "application/xml";
var param = new NameValueCollection();
param.Add("tagName", Content);   //Content contains the xml string to be passed
client.QueryString = param;
client.DownloadString("http://localhost:8000/api/method");

假设内容的值为“abcd”,因此http请求变为: “http://localhost:8000/api/method?tagName=abcd

现在添加更多参数,如

param.Add("tagValue", "ghij")

请求是 “http://localhost:8000/api/method?tagName=abcd&tagValue=ghij

由于我的参数值包含特殊字符“&amp;”它做了什么,它认为一切都作为另一个参数,其值不匹配。关键是使用“Uri.EscapeDataString()”,它实际上告诉程序考虑“&amp;”作为参数值的一部分而不是查询字符串特殊字符。

因此正确的代码是:

param.Add("tagName", Uri.EscapeDataString(Content));

希望它也有助于其他人。