【问题标题】:ISO-8859-1 character set in WCF RequestWCF 请求中的 ISO-8859-1 字符集
【发布时间】:2012-09-01 13:55:04
【问题描述】:

我编写了一个由外部 API 调用的 REST WCF 服务。该请求正在发送 ISO-8859-1 格式的 XML POST 请求。这会导致我的服务发出 400 错误请求响应。

这是我的服务方法的存根:

 [OperationContract]
 [WebInvoke(Method ="POST", UriTemplate="/", RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
 [FaultContract(typeof(String))]
 XmlElement GetInstructions(XmlElement request);

目前,我正在尝试拦截请求并返回适当的内容类型:

public class XmlContentTypeMapper : WebContentTypeMapper
{
    public override WebContentFormat GetMessageFormatForContentType(string contentType)
    {
        return WebContentFormat.Xml;
    }
}

这仅在我从标题中删除 charset=ISO-8859-1 时才有效。

我看到了使用 IClientMessageInspector 和 IDispatchMessageInspector 的示例,但这些似乎是 SOAP 特有的,除非我遗漏了什么。

我能做些什么来解决这个问题?我无法控制传入的请求。

感谢您的任何见解。

这是 XML 请求的第一部分:

POST http://localhost:54814/autocallerid.svc HTTP/1.1
Host: localhost:54814
Content-Type: text/xml, charset=ISO-8859-1
Content-Length: 1734

<?xml version="1.0" encoding="UTF-8"?>
<Request xmlns="urn:oasis:names:tc:xacml:2.0:context:schema:os">
    <Subject SubjectCategory="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject">
 .... 

【问题讨论】:

  • XML 声明的开头是什么样的?

标签: c# wcf web-services rest iso-8859-1


【解决方案1】:

好的。我解决了这个问题。

我只需要将输入类型从 XmlElement 更改为 Stream 并将格式返回为 WebContentFormat.Raw。

像这样:

 [OperationContract]
 [WebInvoke(Method ="POST", UriTemplate = "/info", BodyStyle = WebMessageBodyStyle.Bare,
    RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
 [FaultContract(typeof(String))]
 XmlElement GetInstructions(Stream request);

还有这个:

public class XmlContentTypeMapper : WebContentTypeMapper
{
    public override WebContentFormat GetMessageFormatForContentType(string contentType)
    {
        return WebContentFormat.Raw;
    }
}

【讨论】:

    猜你喜欢
    • 2013-01-19
    • 2012-09-29
    • 2016-11-26
    • 2021-11-05
    • 2018-07-25
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多