gpt4 book ai didi

c# - WebServices 失败,因为 (400) Bad Request because of special character

转载 作者:行者123 更新时间:2023-11-30 22:49:44 24 4
gpt4 key购买 nike

使用 Visual Studio 2008,我设置了一个使用 Web 服务的客户端。它与缓冲区大小无关(因为这是典型的响应,所有适当的大小都增加了)。

我使用列表作为方法的参数。经过大量实验,我使用 System.Net.WebClient 手动创建了一个 Soap 1.1 和一个 Soap 1.2 请求来测试测试结果。

using (var webCtx = new System.Net.WebClient())
{
webCtx.Headers.Add(System.Net.HttpRequestHeader.ContentType, "text/xml");
webCtx.Headers.Add("SOAPAction", "http://tempuri.org/HelloWorld");
var uri = new Uri("http://localhost:12345/MyProject/WebService.asmx");
MessageBox.Show(webCtx.UploadString(uri, xml));
}

其中xml是一个带有实际数据的xml的字符串变量。问题是其中一个字段具有特殊字符。这里是xml消息体的例子。

<PocoClass>
<UnicodeString>&#xE;123</UnicodeString>
</PocoClass>

如果 UnicodeString 的值很简单(即 123),但一旦出现特殊字符,我就会得到 400 Bad Request。

现在,我找到了一篇描述错误的 Microsoft 知识库文章 kb911276 ,基本上是说,安装热修复程序。那真的不是可以解决问题的东西,所以我想知道是否有解决这个问题的想法?

编写某种自定义编码/解码或自定义绑定(bind)的唯一解决方案是否由服务器和客户端实现?有没有更简单的想法?

谢谢

已编辑:List 的使用不是问题,因为它由 VS 处理。这是 soap 消息的更完整(但仍然是部分)内容。

<HelloWorld xmlns="http://tempuri.org/">
<pocoList>
<PocoClass>
<UnicodeString>&#xE;123</UnicodeString>
</PocoClass>
</pocoList>
</HelloWorld>

最佳答案

我有一个网络服务有类似的问题,我们让我们的应用程序的用户运行在线帐户搜索。我找到了一个 VS Feedback item about this ,但 MS 似乎认为这种行为是设计使然。

我们最终做的是编写一个方法,用问号替换序列化为 XML 时不允许使用的所有字符。

允许的列表是:0x09、0x0a、0x0d、0x20-0xd7ff 和 0xe000-0xfffd。其他一切,我们转向“?”。

我想如果你不能这样做,数据应该在传输过程中进行 base64 编码以避免这个问题。我觉得有点奇怪,因为它破坏了通过网络服务无损路由调用的能力。

关于c# - WebServices 失败,因为 (400) Bad Request because of special character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/984293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com