0

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

public HttpResponseMessage PostGrantAccess(DeviceAccessRequest deviceAccessRequest)
{
    var deviceId = deviceAccessRequest.DeviceId;

    var deviceAccessResponse = new DeviceAccessResponse(deviceAccessRequest.RequestId)
        {
            Status = "OK"
        };
    var response = Request.CreateResponse<DeviceAccessResponse>(HttpStatusCode.OK, deviceAccessResponse);
    return response;
}

これは呼び出し元のクライアントコードです。

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost:55208/");

    var request = new DeviceAccessRequest
    {
        RequestId = Guid.NewGuid().ToString(),
        DeviceId = "bla",
        LoginId = "tester",
        Password = "haha" ,                    
    };
    var response = client.PostAsJsonAsync("api/accesspanel", request).Result;
    if (response.IsSuccessStatusCode)
    {
        var deviceAccessResponse = response.Content.ReadAsAsync<DeviceAccessResponse>().Result;

    }
}

オブジェクトクラス:

public class DeviceAccessResponse : ResponseBase
{
    public DeviceAccessResponse()
    {
    }

    public DeviceAccessResponse(string correlationId)
        : base(correlationId)
    {
    }

    public string Status { get; set; }
}

public class ResponseBase
{
    private string correlationId;

    public ResponseBase()
    {
    }

    public ResponseBase(string correlationId)
    {
        this.correlationId = correlationId;
    }
}

コントローラでDeviceAccessRequestを問題なく受信でき、GUID文字列を取得できます。

ただし、応答をクライアントに返した後は、Status = "OK"しか取得できません。この行でクライアントコードに割り当てたGUID文字列を含める代わりに、correlationIdがnullになります。

var deviceAccessResponse = new DeviceAccessResponse(deviceAccessRequest.RequestId)

私は何を取りこぼしたか?

response.Content.ReadAsAsync<DeviceAccessResponse>().Result;オブジェクト全体を再構築するために使用する正しいコードはありますか?

4

2 に答える 2

3

あなたcorrelationIdはプライベートフィールドです。有線でシリアル化する場合は、公開するためにパブリックプロパティを作成する必要があります。

于 2013-03-11T15:20:15.030 に答える
1

公開してクライアントに移動する場合は、パブリック プロパティを作成する必要がcorrelationIdあります。

public class ResponseBase
{
    public ResponseBase()
    {
    }

    public string CorrelationId { get; set; }

    public ResponseBase(string correlationId)
    {
        this.CorrelationId = correlationId;
    }
}
于 2013-03-11T15:21:14.203 に答える