C# 返回JSON作为ASP.NET WebApi控制器中HTTP Get的响应

C# 返回JSON作为ASP.NET WebApi控制器中HTTP Get的响应,c#,asp.net,json,asp.net-web-api,C#,Asp.net,Json,Asp.net Web Api,我可以收集一些变量并列出并将其放入JSON中吗?如果HTTP Get调用成功,JSON将返回给客户端 例如: 我有一个控制器,它必须返回帐户列表和其他几个值: public class BankAccountController : ApiController { [Authorize] [Route("/accounts")] public IHttpActionResult GetAccounts() { List<Account>

我可以收集一些变量并列出并将其放入JSON中吗?如果HTTP Get调用成功,JSON将返回给客户端

例如:

我有一个控制器,它必须返回帐户列表和其他几个值:

public class BankAccountController : ApiController
{
    [Authorize]
    [Route("/accounts")]
    public IHttpActionResult GetAccounts()
    {

        List<Account> userAccounts = new List<Account>{
              new Account { 
                AccountNumber = 1,
                Available = 2346.220m,
                Balance = 3219.12m,
                Currency = "euro",
                InterestRate = 1,
                Name = "Current account",
                Type = ""},

             new Account {
                AccountNumber = 2,
                Available = 12346.220m,
                Balance = 32219.12m,
                Currency = "euro",
                InterestRate = 3,
                Name = "Saving account",
                Type = ""},

             new Account {
                AccountNumber = 3,
                Available = 346.220m,
                Balance = 219.12m,
                Currency = "euro",
                InterestRate = 3,
                Name = "Current account",
                Type = ""},

             new Account {
                AccountNumber = 4,
                Available = 37846.220m,
                Balance = 21943.12m,
                Currency = "euro",
                InterestRate = 3,
                Name = "Saving account",
                Type = ""},

             new Account {
                AccountNumber = 5,
                Available = 137846.220m,
                Balance = 21943.12m,
                Currency = "euro",
                InterestRate = 3,
                Name = "Saving account",
                Type = ""},

             new Account {
                AccountNumber = 6,
                Available = 7846.220m,
                Balance = 21943.12m,
                Currency = "euro",
                InterestRate = 3,
                Name = "Current account",
                Type = ""} 
            };

        var currentAccountsTotal = userAccounts.Count();
        string currentsAccountTotalCurrency = "something";
        string savingsAccountTotalCurrency = "something";
        decimal savingsAccountsTotal = userAccounts.Where(a => a.Name == "Saving account").Select(b => b.Balance).Sum();
        return ?; 
    }
公共类BankAccountController:ApicController
{
[授权]
[路线(“/账户”)]
公共IHttpActionResult GetAccounts()
{
List userAccounts=新列表{
新帐户{
AccountNumber=1,
可用高度=2346.220m,
余额=3219.12米,
货币=“欧元”,
利率=1,
Name=“活期账户”,
类型=”},
新帐户{
AccountNumber=2,
可用高度=12346.220m,
余额=32219.12m,
货币=“欧元”,
利率=3,
Name=“储蓄账户”,
类型=”},
新帐户{
AccountNumber=3,
可用高度=346.220m,
余额=219.12米,
货币=“欧元”,
利率=3,
Name=“活期账户”,
类型=”},
新帐户{
AccountNumber=4,
可用高度=37846.220米,
余额=21943.12m,
货币=“欧元”,
利率=3,
Name=“储蓄账户”,
类型=”},
新帐户{
AccountNumber=5,
可用高度=137846.220m,
余额=21943.12m,
货币=“欧元”,
利率=3,
Name=“储蓄账户”,
类型=”},
新帐户{
AccountNumber=6,
可用高度=7846.220米,
余额=21943.12m,
货币=“欧元”,
利率=3,
Name=“活期账户”,
Type=”“}
};
var currentAccountsTotal=userAccounts.Count();
字符串currentsAccountTotalCurrency=“something”;
字符串savingsAccountTotalCurrency=“something”;
decimal savingsAccountsTotal=userAccounts.Where(a=>a.Name==“储蓄账户”)。选择(b=>b.Balance.Sum();
返回?;
}
我可以将userAccounts列表、currentAccountsTotal、currentsAccountTotalCurrency、savingsAccountsTotal放入一些JSON中并返回给客户端吗

我有一个调用规范,它看起来是这样的:在200个代码中,我将JSON中提到的所有内容返回给客户机

在这种情况下,我应该将什么作为返回值?

您需要知道的是: 开箱即用的webapi支持内容协商的概念

什么是内容协商? 内容协商是选择最佳表示(JSON、XML等)的过程

在WebAPI中是如何实现的? 基本上,它是读取accept头

例如:

Accept: application/xml
如果webapi找到该请求的任何格式化程序,它将按照用户请求格式化响应

您可以添加或删除格式化程序,例如,如果您希望始终使用json,我们应该删除xml格式化程序,如下所示:

config.Formatters.Remove(config.Formatters.XmlFormatter);
如果需要,还可以创建自己的格式化程序,并将其添加到配置中

在代码中,您只需要返回对象或Ok(),具体取决于您使用的返回类型


在您的情况下,我们可以使用匿名对象,或者您可以请求您自己的DTO来表示您的响应,其中包括三个对象。

您可以使用匿名变量吗?即:
返回Ok(new{userAccounts=userAccounts,something=foo1,somethingelse=foo2});
@Stefan嗯,我会这样试试:)谢谢你的建议:)