C# 如何使用自托管WCF处理URL编码的POST请求?
我有自己托管的WCF服务。当输入数据格式已知时,它就像魅力一样有效,但这不是我的情况 我的服务将被调用,就像一个HTML表单将被发布到它一样,但我不知道将被发送的参数的确切列表 外部web服务将发送一个HTTP请求,内容C# 如何使用自托管WCF处理URL编码的POST请求?,c#,.net,wcf,C#,.net,Wcf,我有自己托管的WCF服务。当输入数据格式已知时,它就像魅力一样有效,但这不是我的情况 我的服务将被调用,就像一个HTML表单将被发布到它一样,但我不知道将被发送的参数的确切列表 外部web服务将发送一个HTTP请求,内容“a=foo&b=bar”,是的,URL编码。内容中的参数可能会有所不同。他们的人数可能会有所不同。某些参数可能存在,也可能不存在。所以我对整个URL编码的字符串非常满意,我会自己解码。我必须用ASCII字符串“OK”回答 如何从请求中访问此“a=foo&b=bar”文本?我可以
“a=foo&b=bar”
,是的,URL编码。内容中的参数可能会有所不同。他们的人数可能会有所不同。某些参数可能存在,也可能不存在。所以我对整个URL编码的字符串非常满意,我会自己解码。我必须用ASCII字符串“OK”回答
如何从请求中访问此“a=foo&b=bar”
文本?我可以创建自己的编码器吗?怎么做的
以下是我开始的合同:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "test", BodyStyle = WebMessageBodyStyle.Bare)]
Stream TestPostRequest();
方法如下:
public Stream TestPostRequest() {
var maxByteSize = 16384;
var messageStream = new MemoryStream(maxByteSize);
var messageBuffer = OperationContext.Current.RequestContext.RequestMessage.CreateBufferedCopy(maxByteSize);
messageBuffer.WriteMessage(messageStream);
var rawRequestData = new byte[maxByteSize];
messageStream.Read(rawRequestData, 0, maxByteSize);
var requestDataString = Encoding.UTF8.GetString(rawRequestData);
Console.WriteLine(requestDataString);
var responseData = new byte[2] { 79, 75 }; // OK
var responseStream = new MemoryStream(responseData);
return responseStream;
}
显然它不起作用,因为CreateBufferedCopy
方法需要XML作为输入数据,但获取URL编码的字符串。就像我找到的其他方法一样
我不怕创建实现IEndpointBehavior
或IDispatchMessageInspector
的新类,但我不知道在哪里可以实现允许我以字节而不是XML的形式访问原始请求数据的东西
也许有一点我可以将原始数据转换成XML
编辑:
我的错误是,我的操作堆栈中有一个损坏的行为,严重破坏了消息内容类型。道德是在一个干净的测试项目中隔离测试新特性。第二个寓意是WCF可以实现一切;)第三个问题是:如果消息内部数据中没有XML,那么您就破坏了它;)