在Web API调用期间将xml字符串作为参数传递给查询字符串时遇到问题。我知道它由于特殊的字符表示。但不知道如何解决它。 我需要传递的xml字符串是:
<tagName name="red" query="tableName <> ''" 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捕获部分字符串。
答案 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));
希望它也有助于其他人。