如何从body [FromBody]发布参数并检索WebAPI中<list>中的对象?

时间:2017-06-12 18:10:21

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

如何将参数发布到正文并获取列表中的对象? IO能够在我的控制器中使用此post方法检索数据,并将参数附加到URI

帐户管理员:

[HttpPost]
[ActionName("mini")]
public List<MiniStatement> GetMiniStatement(string accountNumber)
{
    var miniState = BusinessLayer.Api.AccountHolderApi.GetMiniStatement(accountNumber);
    return miniState.ToList();
}

但是如何传递参数[FromBody]并检索列表中的数据?

MiniStatement类:

public  class MiniStatement
{
    public string AccountNumber { get; set; }
    public string TranDate { get; set; }
    public string Trans { get; set; }
    public decimal Amount { get; set; }
}
数据库层中的

GetMiniStatement方法:

public static List<MiniStatement> GetMiniStatement(string accountNumber)
{
    List<MiniStatement> resultList = new List<MiniStatement>();

    using (var conn = new NpgsqlConnection("Server=localhost;UserId = postgres; " + "Password = pes; Database = pmc;"))
    {
        conn.Open();

        using (var command = new NpgsqlCommand("SELECT * FROM sms.dep_mini_statement(@AccountNumber);", conn))
        {
            command.Parameters.AddWithValue("@AccountNumber", accountNumber);

            using (var dr = command.ExecuteReader())
            {
                while (dr.Read())
                {
                    var result = new MiniStatement
                    {
                        AccountNumber = accountNumber,
                        TranDate = (string)dr[0],
                        Trans = (string)dr[1],
                        Amount = (decimal)dr[2]
                    };
                    resultList.Add(result);
                }
            }
        }
    }

    return resultList;    
}

路线

config.Routes.MapHttpRoute("MobileBankingApi", "v1/{controller}/{action}");

2 个答案:

答案 0 :(得分:1)

如果您将数据发布为json,则可以将对象中的AccountNumber填充为

{ "AccountNumber": "23" } 

然后在控制器方法中添加[FromBody]作为此

[HttpPost]
[ActionName("mini")]
public List<MiniStatement> GetMiniStatement([FromBody] MiniStatement state)
{
    var miniState = BusinessLayer.Api.AccountHolderApi.GetMiniStatement(state.AccountNumber);
    return miniState;
}

此外,由于BusinessLayer.Api.AccountHolderApi.GetMiniStatement()返回一个列表,您可以按原样传递响应

答案 1 :(得分:1)

所以基本上你可以做到以下几点。

在api中创建一个模型类。

public class Account
{
 string AccountNumber{get;set;}
}

然后在你的webapi方法中使用它。

[HttpPost]
[ActionName("mini")]
public IActionResult GetMiniStatement([FromBody]Account account)
{
    var miniState = BusinessLayer.Api.AccountHolderApi.GetMiniStatement(account.AccountNumber);
    return new ObjectResult(miniState.ToList());
}

您的请求正文应如下所示。

{
 "AccountNumber":"someNUmber"
}

如果有帮助,请告诉我。