如何使用“POST”方法将json数据发送到具有授权的URL?

时间:2012-02-07 21:43:51

标签: c# json http

我知道这听起来很复杂,我之前没有这样做过。 我正在尝试使用他们的API在goto会议网站上创建注册人。他们的文件要求我使用“POST”方法向网址https://api.citrixonline.com/G2W/rest/organizers/73563532324/webinars/89541144741发送请求 使用 json 数据结合注册人信息 还有一个授权:OAuth oauth_token = XXXXXXXX我不知道如何用c#发送它。他们建议我不要使用jQuery,而是使用服务器端代码。如果你知道怎么做,请帮忙。

希望我明白这个问题。

示例代码将受到高度赞赏。

3 个答案:

答案 0 :(得分:0)

我意识到我的答案不在C#中,但是如果OP可以使用它作为参考点通过PHP调用CITRIX API来注册新的GotoWebinar与会者,我可以提供这个片段作为可能溶液:

首先,我们需要为我们的帐户设置管理器密钥和访问令牌数据...

    $organizer_key= '10000000000XXXXXXX';
    $access_token = 'GwsiiPWaJbHIiaIiocxxxxxxxxxx';

然后,我们获得网络研讨会的最低必填字段(例如来自HTML表单)和JSON编码数据...

    $newRegFields = (object) array(
        'firstName' => $_POST[ 'FirstName' ],
        'lastName'  => $_POST[ 'LastName'  ],
        'email'     => $_POST[ 'Email'     ],
    );

    $newRegistrantFields = json_encode( $newRegFields );

    //echo '<br><br>' . $newRegistrantFields;

获得网络研讨会......

    $webinarID = preg_replace( "/[^0-9]/", "", $_POST[ "WebinarKey" ] );

将URL设置为CITRIX API(不需要 resendConfirmation 选项)...

    $gtw_url = "https://api.citrixonline.com/G2W/rest/organizers/" . $organizer_key . "/webinars/" . $webinarID . "/registrants?resendConfirmation=false";

格式化我们的POST标题......

    $headers = array(
        "HTTP/1.1",
        "Accept: application/json",
        "Content-Type: application/json",
        "Authorization: OAuth oauth_token=$access_token",
        "Content-Length: " . strlen( $newRegistrantFields )
    );

设置我们的CURL选项,确保我们使用 CURLOPT_POST,1 指定一个POST ...

    $curl = curl_init();

    curl_setopt( $curl, CURLOPT_URL, $gtw_url                       );
    curl_setopt( $curl, CURLOPT_HTTPHEADER, $headers                );
    curl_setopt( $curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0 );
    curl_setopt( $curl, CURLOPT_SSL_VERIFYPEER, 0                   );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1                   );
    curl_setopt( $curl, CURLOPT_POST, 1                             );
    curl_setopt( $curl, CURLOPT_POSTFIELDS, $newRegistrantFields    );

    $newRegistrants = curl_exec( $curl );
    curl_close( $curl );

我们的CURL调用已返回JSON编码数据,无论是服务器错误消息还是注册确认。现在让我们将回复变成一个方便的关联数组...

    $newRegistrantsArray = json_decode( $newRegistrants, true );

    //echo '<br><br>' . $newRegistrants . '<br><br>';
    //echo '<pre>'; print_r( $newRegistrantsArray ); echo '</pre>';

如果返回 errorCode 键,则注册被轰炸。我在这里做的就是从服务器抓取实际的错误描述并加载它以返回到我的调用HTML页面,但这完全是可选的...

    if( array_key_exists( 'errorCode', $newRegistrantsArray )) {
        $form_data[ 'status' ] = false;
        $form_data[ 'code'   ] = $newRegistrantsArray[ 'description' ];
        $form_data[ 'error'  ] = 'E200';
        //echo json_encode( $form_data );
        //exit;
    }

现在,如果注册成功,服务器将返回类似......

的内容
(
  [registrantKey] => 2.5022062212198E+18
  [joinUrl] => https://global.gotowebinar.com/join/6552167171182613761/103193261
) 

...所以我只是检查这些钥匙是否被退回,如果是,我知道注册是好的。

    if( array_key_exists( 'registrantKey', $newRegistrantsArray ) && array_key_exists( 'joinUrl', $newRegistrantsArray ) ) {
        $form_data[ 'status' ] = true;
        $form_data[ 'code'   ] = $_POST[ 'Email' ] . ' successfully registered with webinar';
        $form_data[ 'error'  ] = 'E300';
        //echo json_encode( $form_data );
        //exit;
    }

答案 1 :(得分:-1)

您可以使用WebClient Class。设置内容类型授权 Headers并使用UploadString Method执行请求。

答案 2 :(得分:-2)

您可以查看允许您发送HTTP请求的WebClientHttpWebRequest类。