c# - 从 HttpClient 到用户定义对象 C# 的 HttpResponseMessage

标签 c# httpresponse asp.net-web-api webservice-client

我看到过类似的问题,但似乎没有一个对我的问题有帮助,所以请耐心等待。

我有一个这样定义的 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/

相关文章:

c# word-2007 加载项 : get the path and filename of current opened wordfile?

curl - 为什么没有 `Set-Cookie` header 响应?

java - 当各种设备同时使用该功能时,HttpClient 出现问题

c# - 同步 Web Api 和响应时间取决于线程和请求计数

unit-testing - 单元测试 Web API - 如何获取身份验证 token

asp.net-web-api - 身份服务器作为 Web API 或单独应用程序的一部分

c# - 使用最小起订量部分模拟类

c# - 在 MS Search Server 2008 中对 å,ä,ö 字符进行排序

c# - jabber net中如何实现文件传输

java - 在 Jax-rs Web 服务中注入(inject) HttpResponse 时出现空指针异常