2017-05-30 57 views
0

我想通過一個asp.net核心api在數據庫中創建一個地址對象。我使用Postman來調用該方法。asp.net核心Api - 在數據庫中插入新行

類:

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); 
     } 
    } } 

URL(使用POST):

http://localhost:50444/api/mailer/createAddress?client=1&name=test&[email protected] 

我也有方法的破發點,但它從來沒有擊中。我沒有收到任何錯誤消息,它只是沒有做任何事情。

+0

指定端點名稱可以你展示視圖? –

+0

查看[URL編碼](https://www.google.nl/search?q=URL+encoding)您的值。 @符號在URL中無效。使用%40,你會沒事的。 –

+0

爲什麼不傳入'address'對象? – Izzy

回答

3

你可以看到@Rick範登博世的評論,但仍然要指定用行動路線。使用這個

[Route("api/[controller]/[action]")] 
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]")]在你的行動路線附加動作名稱。

+0

POST不*僅用於傳輸數據。就像您使用URL的其餘部分一樣,您可以隨時使用查詢參數,適用於任何HTTP方法。這就是說,根據評論,端點沒有找到,所以你的建議在這裏沒有幫助。 – poke

+0

@poke這不是必需的,但它不是一個約定。如果客戶或開發人員必須實現這個API,它看起來不像通常那樣使用POST,而是通過查詢字符串發送參數。 – jorgonor

1

查看@Ayvaras的評論。由於您正在構建Web API控制器,因此不必在URL中指定操作名稱。 HttpPost將所有POST操作指向郵件控制器,並指向CreateAddress方法。

您的文章網址應該是:

http://localhost:50444/api/mailer?client=1&name=test&[email protected] 
1

問題解決!感謝Ayvaras,

〔路線( 「API/[控制器]/[動作]」)]

確實起作用。現在,該方法被發現我可以看看如何傳遞的對象,而不是使用查詢字符串

0

而不是改變控制器路由方案,它也可以通過執行以下操作

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