Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用自托管WCF处理URL编码的POST请求?_C#_.net_Wcf - Fatal编程技术网

C# 如何使用自托管WCF处理URL编码的POST请求?

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”文本?我可以

我有自己托管的WCF服务。当输入数据格式已知时,它就像魅力一样有效,但这不是我的情况

我的服务将被调用,就像一个HTML表单将被发布到它一样,但我不知道将被发送的参数的确切列表

外部web服务将发送一个HTTP请求,内容
“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,那么您就破坏了它;)