我的 .NET ASMX Web 服务正在接受来 self 无法直接控制的客户端的请求。它发送的请求如下所示:
POST /Service.asmx HTTP/1.1
Connection: Keep-Alive
Pragma: no-cache
Content-Length: 1382
Content-Type: text/xml
Accept: text/xml
Host: localhost
User-Agent: Borland SOAP 1.1
SOAPAction: "http://domain.com/InsertRecords"
<?xml version="1.0"?>
<SOAP-ENV:Envelope... <v>ÄLMÅ BÄCK</v></SOAP-ENV:Envelope>
在我的 WebMethod 中,字符串 ÄLMÅ BÄCK 被修改为 ??LM?? B??CK——典型的编码困惑。
在我的测试中,我发现如果我简单地调整内容类型 header ,一切都很好:
Content-Type: text/xml; charset=utf-8
为什么 .NET 在未指定的情况下选择 utf-8 以外的编码,有什么方法可以强制此 ASMX 使用 UTF-8 编码?
最佳答案
在调用 Web 服务处理程序之前运行以下代码会导致 HTTP 请求正确解码:
if (HttpContext.Current.Request.ContentType == "text/xml") {
HttpContext.Current.Request.ContentType = "text/xml; charset=UTF-8";
}
这感觉有点老套,但我相信它适合我的情况。我仍然对一些背景信息非常感兴趣,了解为什么这是一个问题,以及是否有更好的方法来解决这个问题(除了让客户端更明确地了解编码之外)。
关于asp.net - ASMX Web 服务对传入请求使用错误的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10221051/