当前位置: 首页 > 知识库问答 >
问题:

卷曲到WCF的更好方法

章兴发
2023-03-14

我可以通过一个CURL请求发布到我用C#从PHP编写的web服务,但是我无法正确地完成请求。无论我做什么,我能让帖子显示出来的唯一方法是我json\u encode表单数据头。因此,我的PHP代码最终是这样的:

$user = array('id'=>5, 'first_name' => 'First', 'last_name' => 'Last');

$uch = curl_init();
curl_setopt($uch, CURLOPT_URL,"http://localhost:50115/Service1.svc/postUser");
curl_setopt($uch, CURLOPT_POST, 1);
curl_setopt($uch, CURLOPT_POSTFIELDS, json_encode("user=" . json_encode($user)));
curl_setopt($uch, CURLOPT_HTTPHEADER, array(
                                            'Content-Type: application/json'
                                            ));
curl_setopt($uch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($uch);

当我设定路线时:

curl_setopt($uch, CURLOPT_POSTFIELDS, json_encode("user=" . json_encode($user)));

到:

curl_setopt($uch, CURLOPT_POSTFIELDS, array("user" => json_encode($user)));
--OR--
curl_setopt($uch, CURLOPT_POSTFIELDS, 
                    http_build_query(array("user" => json_encode($user))));
--OR--
curl_setopt($uch, CURLOPT_POSTFIELDS, json_encode($user));

PHP中没有错误,C#服务不返回错误(我在配置中设置了返回异常),函数上的断点永远不会被命中。

在C#端,我的接口和服务设置如下:

//Interface
[OperationContract]
[WebInvoke(Method="POST",
            BodyStyle=WebMessageBodyStyle.Bare, //Any other value, the break-point 
                                                //will not trigger
            RequestFormat=WebMessageFormat.Json,
            UriTemplate = "postUser")]
void PostUser(string user);

//Service
public void PostUser(string user)
{
    var request = user;
    int i = 5; //Debug set here
}

当断点命中时,我能够看到user的值为:

user={"id":5,"first_name":"First","last_name":"Last"}

我希望user的值简单地为:

{"id":5,"first_name":"First","last_name":"Last"}

有可能收到我这样的回复吗?如果是这样,我需要改变什么来实现它?

共有1个答案

章茂
2023-03-14

在尝试了PHP和C#的多种组合之后,我终于让它开始工作了。在PHP中,CURLOPT_POSTFIELDS需要设置为:

curl_setopt($uch, CURLOPT_POSTFIELDS, json_encode(array("user" => json_encode($user))));

然后,在C#中,我需要将BodyStyle=WebMessageBodyStyle.Bare更改为BodyStyle=WebMessageBodyStyle.Wrapped

 类似资料:
  • 我在一天中做了一些API调用,但在使用Adobe Sign的新设置时遇到了问题。我可以得到请求很好,但得到HTTP404时,尝试任何张贴或放入他们的服务器。例如,到这里.... 当然,$HttpCode返回404,如上图所示。我为邮局做错什么了吗?

  • 问题内容: 我想先查看请求中的帖子字段,然后再发送。(出于调试目的)。 我正在使用的PHP库(类)已经制作(不是我本人制作的),所以我试图理解它。 据我所知,它用于设置不同的选项(如标头等),然后用于发送请求。 关于如何查看正在发送哪些帖子字段的想法? 问题答案: 您可以启用以下选项: 当被设置时,输出写入 STDERR 或使用指定的文件。输出非常有用。 您还可以使用tcpdump或wirehar

  • 在我的VPS服务器上的PHP文件中考虑这个代码: 还这个 每天多次测试后,“连接时间”始终保持在50秒标记。我相信如果不是在1秒及以下,速度应该会快10倍。 我不知道服务器配置,但我被告知,我的服务器的CPU或RAM可能在故障。我使用顶部命令行显示以下内容,这对我来说似乎很好: 任务:共80项,1项运行,79项睡眠,0项停止,0项僵尸 Cpu:0.0%us、0.0%sy、0.0%ni、100.0%

  • 我正在开发一个简单的论坛Web应用程序使用SpringMVC, JPA2.我创建了反映数据库表结构的JPA实体,如用户、论坛、帖子等。 但是,当在UI上显示数据时,我需要DTO,因为我不能始终使用实体保存要在UI上显示的数据。 例如:更改密码屏幕。在这里,我需要持有旧Pwd,新密码和确认新Pwd。但是用户实体没有旧/新/确认Pwd字段,它只有密码。所以我需要创建DTO,它只是网络和服务层之间的数据

  • 我正在使用一个函数,该函数接收CSV文件名,将每一行转换为字典,然后返回创建的字典列表(以便能够在以后的函数中进行迭代和组织。我已经通过执行以下操作实现了我想要的功能,但觉得必须有更好的方法。有改进建议吗? CSV内容示例: