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



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

<tagName name="red" query="tableName &lt;&gt; ''" 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));

希望它也能帮助其他人。

相关内容

  • 没有找到相关文章