簡體   English   中英

從HttpClient到用戶定義的對象C#的HttpResponseMessage

[英]HttpResponseMessage from HttpClient to User Defined Object C#

我曾問過類似的問題,但似乎沒有一個問題對我有幫助,所以請耐心等待。

我有一個這樣定義的WebAPI控制器方法:

[HttpPost]
[Route("")]
public HttpResponseMessage CreateMyObject(MyObjectRequest myObject)
{
    MyObject o;
    try
    {
        o = _serviceFactory.GetInstance().CreateMyObject(myObject);
    }
    catch (Exception ex)
    {
        ex.WriteToLog();
        throw ApiHelper.CreateResponseException(HttpStatusCode.InternalServerError, ex);
    }
    var response = Request.CreateResponse(HttpStatusCode.Created, o);
    var uri = Url.Link("GetMyObjectById", new { myObjectId = o.MyObjectId.ToString() });
    response.Headers.Location = new Uri(uri);
    return response;
}

假設MyObject包含兩個屬性,

public MyObject
{
    public Guid MyObjectId;
    public string MyObjectName
}

編寫了一個客戶端以在WPF應用程序中調用這些控制器方法。 這是正在使用的客戶端方法:

public HttpResponseMessage CreateQuote(MyObjectRequest myObject)
{
    var hashtable = new Hashtable
                {
                    {"myObject", myObject}
                };

    var task = GetResponse("", hashtable);
    var response = task.Result;

    return response;
} 

protected async Task<HttpResponseMessage> GetResponse(string path, Hashtable parameters)
{
    var response = await GetAsync(BuildRequestUri(path, parameters)).ConfigureAwait(false);
    return response.IsSuccessStatusCode ? response : new HttpResponseMessage();
}

protected async Task<HttpResponseMessage> GetResponse(string path)
{
    return await GetResponse(path, null);
}

控制器和支持的客戶端代碼不是我寫的,並且已經在系統中。 我只是在WPF應用程序中使用它。 現在,我試圖通過應用程序中的客戶端調用控制器方法,並從響應中獲取MyObject,以便可以訪問已創建和設置的MyObjectId。 我已經嘗試了對類似問題的其他一些響應,但是甚至沒有看到為了獲得信息而在響應中調用的一些方法。 這是我在應用程序中對客戶端的調用的第一部分:

var httpResponse = ApplicationService.CreateMyObject(myObjectRequest);

應用程序服務只是將客戶端注入到構造函數中,並允許我調用CreateMyObject方法。 對於應該如何從響應中獲取MyObject對象,是否可以提供任何見解?

我對Web api還是有點陌生​​,但是我目前正在一個項目中使用它。 嘗試以下代碼:

MyObject myObject;
if (response.IsSuccessStatusCode)
{
    // Parse the response body. Blocking!
    myObject = response.Content.ReadAsAsync<MyObject>().Result;
}

因此,理論上您可以像這樣更改您的方法(可能不完全是您想要的):

public MyObject CreateQuote(MyObjectRequest myObject)
{
    var hashtable = new Hashtable
                {
                    {"myObject", myObject}
                };

    var task = GetResponse("", hashtable);
    var response = task.Result;

    MyObject newObject;
    if (response.IsSuccessStatusCode)
    {
        // Parse the response body. Blocking!
        newObject= response.Content.ReadAsAsync<MyObject>().Result;
    }

    return newObject; // instead of response
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM