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 ageage 的。您需要先输入 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);