2017-07-15 57 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