C# 返回JSON作为ASP.NET WebApi控制器中HTTP Get的响应
我可以收集一些变量并列出并将其放入JSON中吗?如果HTTP Get调用成功,JSON将返回给客户端 例如: 我有一个控制器,它必须返回帐户列表和其他几个值: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>
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嗯,我会这样试试:)谢谢你的建议:)