这段Java代码在C#中的等价物是什么?(setRequestEntity)

这段Java代码在C#中的等价物是什么?(setRequestEntity),java,c#,Java,C#,有一个用Java开发的HTTP服务器,它利用了HttpServletRequest,HttpServletResponse等。。在这个服务器中,有一个方法被“POST”调用,并接收一个参数,一个巨大的字符串 通常,此方法由Java应用程序调用,并且工作正常,用于调用的代码如下: MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager(); PostMethod po

有一个用Java开发的HTTP服务器,它利用了
HttpServletRequest
HttpServletResponse
等。。在这个服务器中,有一个方法被“POST”调用,并接收一个参数,一个巨大的字符串

通常,此方法由
Java
应用程序调用,并且工作正常,用于调用的代码如下:

MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
PostMethod post = new PostMethod(this.serverUrl);
post.setRequestEntity(new CrossTalkRequestEntity(msg));
HttpClient cli = new HttpClient(connectionManager);
int code = cli.executeMethod(post);
要发送的参数是
msg
变量,请注意没有指定的参数来执行POST

问题是:当我尝试向此服务器发送帖子时,如果没有命名参数,我无法发送我的
字符串
参数,以下代码是服务器获取参数值的方式:

requestMessage = JaxbHelper.createContextAndUnmarshal(CrossTalkMessage.class, request.getInputStream());
请注意,服务器没有通过名称获取参数,它只是调用
request.getInputStream()
并获取值

我已经尝试了很多方法来实现这一点,现在我尝试使用下面的方法进行调用,但它不起作用,因为我传递的是一个命名参数
,而不是像Java调用那样设置请求实体(
setRequestEntity

如何在
c
中调用此HTTP服务器并像
Java
do那样传递参数

编辑 有类的代码
CrossTalkRequestEntity

class CrossTalkRequestEntity implements RequestEntity {

                private final byte[] data;

                CrossTalkRequestEntity(CrossTalkMessage msg) {
                               ByteArrayOutputStream out = new ByteArrayOutputStream();
                               try {
                                               JaxbHelper.createContextAndMarshal(CrossTalkMessage.class, msg, out);
                               } finally {
                                               try {
                                                               out.flush();
                                                               out.close();
                                               } catch (IOException e) {
                                               }
                               }
                               this.data = out.toByteArray();
                }

                @Override
                public boolean isRepeatable() {
                               return true;
                }

                @Override
                public void writeRequest(OutputStream out) throws IOException {
                               out.write(data);
                }

                @Override
                public long getContentLength() {
                               return data.length;
                }

                @Override
                public String getContentType() {
                               return "text/xml";
                }
}

在深入研究代码之后,问题在于请求的内容类型,原始Java代码以“text/xml”的形式发送内容,而C#代码以“application/x-www-form-urlencoded”的形式发送内容


将ContentType更改为“text/xml”,它将起作用。

您是否尝试过执行
byte[]byteArray=Encoding.UTF8.GetBytes(数据)
而不是
byte[]byteArray=Encoding.UTF8.GetBytes(“value=“+data”)?是的,我有。当我尝试此操作时,
data
的值会像参数一样继续发送,但会使用另一个名称(因为在
data
变量的内容中有一个
foo=bar
字符串)同样,在Java示例中,您正在嵌入整个对象,“new CrossTalkRequestEntity(msg)”。。。我猜你的接收者想反序列化这个?因此,您需要在C#中构造一个类似的obj,并将其流附加到msg中,然后将其删除。我怀疑问题在于将内容序列化为字符串的方式。您可以添加用于将类序列化为JSON的代码吗?@RichardTyregrim这不是重点。关键是:当服务器执行
request.getInputStream()
时,他不会获取我的参数
CrossTalkRequestEntity
只是一个继承自
RequestEntity
Java类并返回
字节[]
的类。
class CrossTalkRequestEntity implements RequestEntity {

                private final byte[] data;

                CrossTalkRequestEntity(CrossTalkMessage msg) {
                               ByteArrayOutputStream out = new ByteArrayOutputStream();
                               try {
                                               JaxbHelper.createContextAndMarshal(CrossTalkMessage.class, msg, out);
                               } finally {
                                               try {
                                                               out.flush();
                                                               out.close();
                                               } catch (IOException e) {
                                               }
                               }
                               this.data = out.toByteArray();
                }

                @Override
                public boolean isRepeatable() {
                               return true;
                }

                @Override
                public void writeRequest(OutputStream out) throws IOException {
                               out.write(data);
                }

                @Override
                public long getContentLength() {
                               return data.length;
                }

                @Override
                public String getContentType() {
                               return "text/xml";
                }
}