asp.net core Api - 在数据库中插入新行

时间:2017-05-30 07:35:44

标签: c# asp.net-core

我试图通过asp.net核心api在数据库中创建一个地址对象。我使用Postman来调用该方法。

类别:

namespace LC.Tools.API.Controllers {
    [Route("api/[controller]")]
    public class MailerController : Controller
    {
        Data.LCToolsDbContext _context;

        public MailerController(Data.LCToolsDbContext context)
        {
            _context = context;
        }

        [HttpPost]
        public async Task<IActionResult> CreateAddress(int client, string name, string email)
        {
            Address adr = new Address() { ClientId = client, Name = name, Email = email };
            _context.MailerAddresses.Add(adr);
            await _context.SaveChangesAsync();

            return Ok(adr);
        }
    } }

网址(使用POST):

http://localhost:50444/api/mailer/createAddress?client=1&name=test&email=mail@mail.no

我在方法中也有一个断点,但它永远不会命中。我没有收到任何错误消息,它只是没有做任何事情。

5 个答案:

答案 0 :(得分:3)

您可以看到@Rick van den Bosch的评论,但您仍然希望通过行动指定路线。使用这个

 [Route("api/[controller]/[action]")] 

答案 1 :(得分:1)

请参阅@Ayvaras的评论。由于您正在构建Web API控制器,因此您不必在URL中指定操作名称。 HttpPost将所有POST操作指向邮件程序控制器,指向CreateAddress方法。

您的POST网址应为:

http://localhost:50444/api/mailer?client=1&name=test&email=mail@mail.no

答案 2 :(得分:1)

问题解决了!谢谢Ayvaras,

  

〔路线(&#34; API / [控制器] / [动作]&#34)]

做了这个伎俩。现在找到了该方法,我可以研究如何传递一个对象而不是使用querystring

答案 3 :(得分:0)

您没有正确使用POST。

如果你使用POST,你不应该通过查询字符串发送参数,你应该使用请求体。即使你仍然需要通过查询字符串发送它们,你应该在动作参数中使用FromQuery属性。

[HttpPost]
public async Task<IActionResult> CreateAddress([FromQuery] int client, [FromQuery] string name, [FromQuery] string email)
{
    Address adr = new Address() { ClientId = client, Name = name, Email = email };
    _context.MailerAddresses.Add(adr);
    await _context.SaveChangesAsync();

    return Ok(adr);
}

修改:使用[Route("api/[controller]/[action]")]在操作路线中附加操作名称。

答案 4 :(得分:0)

也可以通过执行以下操作来指定端点名称,而不是更改控制器路由方案

[HttpPost("createAddress")]
public async Task<IActionResult> CreateAddress(int client, string name, string email)
{
    [...]
}