我试图通过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
我在方法中也有一个断点,但它永远不会命中。我没有收到任何错误消息,它只是没有做任何事情。
答案 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)
{
[...]
}