从web api控制器方法返回单个对象和字符串

时间:2017-05-29 06:49:32

标签: c# .net asp.net-web-api asp.net-web-api2 httpresponse

我处于这样一种情况,我需要将单个对象与字符串一起返回..我对web api很新,并且无法弄清楚如何返回多个参数..

下面是我到目前为止所尝试的代码..

    public async Task<IHttpActionResult> PostAuthenticationData(long id, string password)
    {
        Consumer consumer = await db.Consumers.FindAsync(id);

        if (consumer == null)
        {
            return NotFound();
        }

        if(consumer.ConsumerPassword != password)
        {
            return BadRequest();
        }

        ConsumerSessionTokenLog consumerSessionTokenLog = await db.ConsumerSessionTokenLogs.FindAsync(id);

        if(consumerSessionTokenLog == null)
        {
            return NotFound(); 
        }
        else
        {
            string sessionToken = consumerSessionTokenLog.SessionToken;
        }

  /// here i need to return "sessionToken" and "consumer" object 
        return Ok(consumer);
    }

任何人都可以帮助解决这个问题。

非常感谢提前

2 个答案:

答案 0 :(得分:3)

创建一个包装两个值的类,或者可以返回一个匿名类型,如下所示:

return Ok(new { consumer, sessionToken });

请注意,您需要将sessionToken从if语句范围中提升。

答案 1 :(得分:2)

Joust定义要返回的结构:

struct MyReturType
{
   object obj;
   string str;

   public MyReturType(object o, string s)
   {
      obj = o;
      str = s;
   }
}

然后返回:

    public async Task<IHttpActionResult> PostAuthenticationData(long id, string password)
    {
        Consumer consumer = await db.Consumers.FindAsync(id);

        if (consumer == null)
        {
            return NotFound();
        }

        if(consumer.ConsumerPassword != password)
        {
            return BadRequest();
        }

        ConsumerSessionTokenLog consumerSessionTokenLog = await db.ConsumerSessionTokenLogs.FindAsync(id);

        if(consumerSessionTokenLog == null)
        {
            return NotFound(); 
        }
        else
        {
            string sessionToken = consumerSessionTokenLog.SessionToken;
        }

  /// here i need to return "sessionToken" and "consumer" object 
        return Ok(new MyReturType(consumer,sessionToken));
    }