1

Web APIコントローラーに次のWebメソッドがあります

    public HttpResponseMessage PostMakeBooking(FacilityBookingRequest bookingRequest)
    {

        var returnStatus = HttpStatusCode.OK;
        var json = new JavaScriptSerializer().Serialize(bookingRequest);

        var response = Request.CreateResponse<CardholderResponse>(returnStatus, cardholderResponse);


        return response;

    }

.NET アプリからこの呼び出しを行うと、シリアル化すると json 文字列が正しく表示されます

{"correlationId":null,"RequestId":"7ec5092a-342a-4e32-9311-10e7df3e3683","BookingId":"BK-123102","CardholderId":"123456","BookingFrom":"\/Date(1370512706448)\/","BookingUntil":"\/Date(1370523506449)\/","DeviceId":"ACU-01-R2","Action":"Add","LoginId":"tester","Password":"tester"}

ただし、phpスクリプトから呼び出すようにしたとき

public function web_request(){

    $guid   =self::getGUID();
    $replace = array("{","}");
    $guid  = str_replace($replace, "", $guid);

    $client = new Zend_Rest_Client("http://203.92.72.221");
    $request= new myZendCommon_FacilityBookingRequest();
    $request->RequestId         =$guid;
    $request->BookingFrom       ="27/03/2013 05:30";
    $request->BookingUntil      ="27/03/2013 06:30";
    $request->CardholderId      ="E0185963";
    $request->DeviceId          ="ACU-B2-01-R1";
    $request->BookingId         ="111";
    $request->Action            ="Add";
    $request->LoginId           ="tester";
    $request->correlationId     ="(null)";
    $request->Password          ="tester";


    $request = json_encode($request);

    $response = $client->restPost("/ibsswebapi/api/facilitybooking",$request);


    print_r($response);
    exit();

呼び出しは私の Web メソッドに送られますが、次を使用してシリアル化するとJavaScriptSerializer().Serialize(bookingRequest)

{"correlationId":null,"RequestId":null,"BookingId":null,"CardholderId":null,"BookingFrom":"\/Date(-62135596800000)\/","BookingUntil":"\/Date(-62135596800000)\/","DeviceId":null,"Action":null,"LoginId":null,"Password":null}

すべての値がヌルです。

スクリプトに何か問題がありますか?

4

2 に答える 2

2

私はキランが正しいと信じています。自分の答えが役に立たないと感じた人がいる理由がわかりません。とにかく、私の理解では、JSON 文字列を作成し、同じフォームの投稿を行っているということです。この場合、コンテンツ タイプは application/www-form-urlencoded として送信されますが、リクエスト ボディは JSON 文字列です。Fiddler を使用して、PHP スクリプトによって要求がどのように送信されているかを確認できます。JSON を投稿する方法を説明する PHP の知識はありませんが、JSON エンコーディング行を削除するだけで問題ないと思います$request = json_encode($request);

ASP.NET Web API の観点から、要求にContent-Type: application/jsonヘッダーがあり、本文に適切な JSON がある場合、または要求にContent-Type:application/www-form-urlencodedヘッダーがあり、本文にフォーム URL エンコードされたコンテンツがある場合RequestId=7ec5092a-342a-4e32-9311-10e7df3e3683&BookingId=BK-123102など、Web API はまったく問題ありません。バインディング。現在、リクエストは Web API がバインドする正しい形式で送信されていません。

于 2013-06-08T06:01:15.233 に答える
1
  1. リクエストでヘッダーを送信していContent-Type:application/jsonますか?

  2. また、次のコードを追加して、モデル状態の検証エラーをキャッチします。

.

if (!ModelState.IsValid)
{
    throw new HttpResponseException(
         Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState));
}
于 2013-06-08T01:16:55.350 に答える