[英]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.