2017-07-15 96 views
0

我有這個方法在/ api/values/{any number}處被觸發。dotnet核心從url結尾獲得id

public class ValuesController : Controller 
{ 

    [HttpPut("{id}")] 
    public void Put(int id, [FromBody]string value) 
    { 
     Console.WriteLine(id); 
     Program.GetCustomer(id); 
    } 
} 

Console.WriteLine(id)返回的值爲0,當它應該返回的數字在url的末尾。我不確定我是否誤解了這是如何工作的?

回答

0
[Route("api/[controller]")] 
public class ValuesController : Controller {  
    [HttpPut("{id:int}")] //Matches PUT api/values/5 
    public IActionResult Put(int id, [FromBody]string value) { 
     Console.WriteLine(id.ToString()); 
     var customer = Program.GetCustomer(id); 
     return customer != null ? Ok(customer) : NotFound(); 
    } 
} 

上述控制器和動作應該匹配PUT請求來

http://<host>/api/values/5 

其中id應在動作被映射到值5和填充了什麼是在的主體發送的value請求。

路由約束{id:int}可確保路由與在URL段中輸入的有效整數匹配。

如果刪除約束並輸入了無效整數,則id的值將映射到其默認值0,因爲解析時的值不會解析爲有效整數。

+0

阿好吧,所以它只能匹配到5?我認爲這只是一個例子。 – Matt

+0

@Matt'5'只是一個例子。它將匹配任何有效的整數。 – Nkosi