我看到过类似的问题,但似乎没有一个对我的问题有帮助,所以请耐心等待。
我有一个这样定义的 WebAPI Controller 方法:
[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 应用程序中调用这些 Controller 方法。这是正在使用的客户端方法:
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);
}
Controller 和支持的客户端代码不是我写的,已经在系统中了。我只是在 WPF 应用程序中使用它。现在,我试图通过应用程序中的客户端调用 Controller 方法并从响应中获取 MyObject,以便我可以访问已创建和设置的 MyObjectId。我已经尝试过对类似问题的其他一些回答,但甚至没有看到为获取信息而在响应中调用的一些方法。这是我在应用程序中调用客户端的第一部分:
var httpResponse = ApplicationService.CreateMyObject(myObjectRequest);
应用程序服务只是将客户端注入(inject)到构造函数中,并允许我调用 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
}
关于c# - 从 HttpClient 到用户定义对象 C# 的 HttpResponseMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22539740/