在 Web API 调用期间将 xml 字符串作为查询字符串中的参数传递时遇到问题。我知道这是由于特殊的字符表示。但不知道如何解决它。我需要传递的 xml 字符串是:
<tagName name="red" query="tableName <> ''" requestId="requestorName:sessionID" />
但在服务方面,唯一被传递的是
<tagName name="red" query="tableName
由于传递的字符串被记录为 XML,因此我无法将 <替换为><,将> 替换为>。 请为我提供一个解决方案。替换为>
我将字符串附加到客户端,如下所示:
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");
我有一个网络 API 如下
[HttpGet]
[Route("api/getquery")]
public HttpResponseMessage method(string tagName)
{
//funtions to perform
}
Web api 捕获部分字符串。
找到我自己的查询的解决方案.. :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">
由于我的参数值包含特殊字符"&",它的作用是将所有帖子视为值不匹配的另一个参数。键是使用"Uri.EscapeDataString((",它实际上告诉程序将"&"视为参数值的一部分,而不是查询字符串特殊字符。
因此,正确的代码将是:
param.Add("tagName", Uri.EscapeDataString(Content));
希望它也能帮助其他人。