C# WEB API 如何使用参数进行 HttpPost 以及如何 httpsGet 字符串和 return 自定义列表
C# WEB API How to HttpPost with Parameter and how to httpsGet string and return custom List
我正在做一个 WEB API,它会生成一个带有客户电子邮件的随机信用卡号。
首先,如果没有 Postman JSON 代码,Post 客户的电子邮件和信用卡号码以及 de ID 仅通过 https://localhost: 44355/api/ClienteDados/“在这里输入电子邮件”。下面是我到目前为止所拥有的。我设法用 Postman 完成,但我想在 URL.
中完成
我的 Class 是 ClienteDados。
内部 ID
字符串 EmailId
字符串 NumCartao
我的上下文是_context。
我的数据库是 ApiContext 和 DbSet ClientesDB
[HttpPost("{email}")]
public async Task<ActionResult<ClienteDados>> PostClienteDados(string email, ClienteDados clienteDados)
{
//Begin
Random rnd = new Random();
int cardNumber1 = rnd.Next(4572, 4999);
int cardNumber2 = rnd.Next(1000, 9999);
int cardNumber3 = rnd.Next(1000, 9999);
int cardNumber4 = rnd.Next(1000, 9999);
clienteDados.NumCartao = $"{cardNumber1} {cardNumber2} {cardNumber3} {cardNumber4}";
clienteDados.EmailId = email;
//End
_context.ClientesDB.Add(clienteDados);
await _context.SaveChangesAsync();
return CreatedAtAction("GetClienteDados", new { id = clienteDados.NumCartao }, clienteDados.NumCartao);
}
在我使用 EF Inmemory 注册客户信息后,我想从参数 EMAIL 中获取所有信用卡的 HttpGet。因此,当他们键入 /email/“此处发送电子邮件”时,它会显示该电子邮件中所有信用卡号的列表。
如何做列表,如何通过字符串 Email 进行搜索?一直以来我只能通过int ID搜索。
[HttpGet, Route("email/{email}")]
public async Task<ActionResult<IEnumerable<ClienteDados>>> GetEmail(string email)
{
var cc = await _context.ClientesDB.FindAsync(email);
return Ok(cc);
}
上面的 Https Get 还不能工作,因为它是一个字符串,它只适用于 int ID。
非常感谢您。
编辑 1
所以我设法通过 url 参数获得了列表,但它显示了 id、电子邮件和抄送编号,我如何才能将其过滤为抄送编号?
List<ClienteDados> list = await _context.ClientesDB.Where(a => a.EmailId.Equals(email)).ToListAsync();
return Ok(list);
在您的 GetEmail
函数中尝试此代码
await _context.ClientesDB.Where(a => a.EmailId.Equals(email)).ToListAsync();
更新:
首先你可以创建一个新的TYPE
class NEW_TYPE
{
public string CARD_ { get; set; }
};
然后在函数内部使用这个查询
var query = from a in _context.ClientesDB
where a.EmailId.Equals(email)
select new NEW_TYPE
{
CARD_ = a.NumCartao
};
var cc = await query.ToListAsync();
return cc;
cc
将是 NEW_TYPE
的列表,其中仅包含卡信息 List<NEW_TYPE>
您可以参考 THIS 网站了解更多信息。
使用这个例子:
[HttpPost]
public void Test(int age)
{
Console.Write(age);
}
您可以像这样创建一个请求:
C# 将使用 url 参数并将它们带入调用。请注意,变量名称必须与参数变量匹配才能正常工作。请注意我是如何在这两个地方使用 int age
和 age
的。您需要先输入 url 参数。
在您的情况下,您将传递电子邮件,如下所示:
https://localhost:5443/controller/test?email=email@email.com
并且 c# 中的函数会将字符串电子邮件作为函数输入变量中的第一项。 public void Test(string email)
更改此行:
List<ClienteDados> list = await _context.ClientesDB.Where(a => a.EmailId.Equals(email)).ToListAsync();
return Ok(list);
至:
var list = _context.ClientesDB.Where(a => a.EmailId.Equals(email)).Select(s => new { NumCartao = s.NumCartao }).ToList();
return Ok(list);
我正在做一个 WEB API,它会生成一个带有客户电子邮件的随机信用卡号。
首先,如果没有 Postman JSON 代码,Post 客户的电子邮件和信用卡号码以及 de ID 仅通过 https://localhost: 44355/api/ClienteDados/“在这里输入电子邮件”。下面是我到目前为止所拥有的。我设法用 Postman 完成,但我想在 URL.
中完成我的 Class 是 ClienteDados。
内部 ID
字符串 EmailId
字符串 NumCartao
我的上下文是_context。
我的数据库是 ApiContext 和 DbSet ClientesDB
[HttpPost("{email}")]
public async Task<ActionResult<ClienteDados>> PostClienteDados(string email, ClienteDados clienteDados)
{
//Begin
Random rnd = new Random();
int cardNumber1 = rnd.Next(4572, 4999);
int cardNumber2 = rnd.Next(1000, 9999);
int cardNumber3 = rnd.Next(1000, 9999);
int cardNumber4 = rnd.Next(1000, 9999);
clienteDados.NumCartao = $"{cardNumber1} {cardNumber2} {cardNumber3} {cardNumber4}";
clienteDados.EmailId = email;
//End
_context.ClientesDB.Add(clienteDados);
await _context.SaveChangesAsync();
return CreatedAtAction("GetClienteDados", new { id = clienteDados.NumCartao }, clienteDados.NumCartao);
}
在我使用 EF Inmemory 注册客户信息后,我想从参数 EMAIL 中获取所有信用卡的 HttpGet。因此,当他们键入 /email/“此处发送电子邮件”时,它会显示该电子邮件中所有信用卡号的列表。
如何做列表,如何通过字符串 Email 进行搜索?一直以来我只能通过int ID搜索。
[HttpGet, Route("email/{email}")]
public async Task<ActionResult<IEnumerable<ClienteDados>>> GetEmail(string email)
{
var cc = await _context.ClientesDB.FindAsync(email);
return Ok(cc);
}
上面的 Https Get 还不能工作,因为它是一个字符串,它只适用于 int ID。 非常感谢您。
编辑 1 所以我设法通过 url 参数获得了列表,但它显示了 id、电子邮件和抄送编号,我如何才能将其过滤为抄送编号?
List<ClienteDados> list = await _context.ClientesDB.Where(a => a.EmailId.Equals(email)).ToListAsync();
return Ok(list);
在您的 GetEmail
函数中尝试此代码
await _context.ClientesDB.Where(a => a.EmailId.Equals(email)).ToListAsync();
更新:
首先你可以创建一个新的TYPE
class NEW_TYPE
{
public string CARD_ { get; set; }
};
然后在函数内部使用这个查询
var query = from a in _context.ClientesDB
where a.EmailId.Equals(email)
select new NEW_TYPE
{
CARD_ = a.NumCartao
};
var cc = await query.ToListAsync();
return cc;
cc
将是 NEW_TYPE
的列表,其中仅包含卡信息 List<NEW_TYPE>
您可以参考 THIS 网站了解更多信息。
使用这个例子:
[HttpPost]
public void Test(int age)
{
Console.Write(age);
}
您可以像这样创建一个请求:
C# 将使用 url 参数并将它们带入调用。请注意,变量名称必须与参数变量匹配才能正常工作。请注意我是如何在这两个地方使用 int age
和 age
的。您需要先输入 url 参数。
在您的情况下,您将传递电子邮件,如下所示:
https://localhost:5443/controller/test?email=email@email.com
并且 c# 中的函数会将字符串电子邮件作为函数输入变量中的第一项。 public void Test(string email)
更改此行:
List<ClienteDados> list = await _context.ClientesDB.Where(a => a.EmailId.Equals(email)).ToListAsync();
return Ok(list);
至:
var list = _context.ClientesDB.Where(a => a.EmailId.Equals(email)).Select(s => new { NumCartao = s.NumCartao }).ToList();
return Ok(list);