Web API是需要接受參數的,譬如,通常用於創建數據的POST method需要接受輸入數據,而用於GET method也需要接受一些可選參數,譬如:爲了性能起見,控制返回數據的數量是至關重要的。
首先來看輸入參數的幾種形式:
- /api1/{parameter1}/{parameter2}/…/{parametern}
- /api1&{parameter1}=xxx&{parameter2}=xxx&…&{parametern}=xxx
- /api1: 輸入內容在Body中
有了以上理解,再來看ASP.NET Core 1.0如何實現。
- 針對第一種輸入參數,實現方法是在對應的Controller中添加如下的屬性
[Route("api/[controller]")]
public class ValueController : Controller
{
[HttpGet("{parameter1}\{parameter2}")]
public IEnumerable<String> Get(String parameter1, String parameter2)
{
// Do the job!
}
...
}
- 針對第二種輸入參數(其實是可選參數),實現方法類似,只是不需要再HttpGet的屬性中指定Route:
[Route("api/[controller]")]
public class ValueController : Controller
{
[HttpGet()]
public IEnumerable<String> Get(Int32? parameter1 = null, String parameter2 = "")
{
// Do the job!
}
...
}
- 針對第三種輸入參數,實現方法是通過FromBody的屬性:
[Route("api/[controller]")]
public class ValueController : Controller
{
[HttpPost]
public IActionResult Post([FromBody]String cont)
{
// Do the job!
}
...
}
既然提到了FromBody屬性,那麼索性介紹一下另外一個FromUri。以下示例來自於ASP.NET官方文檔。
一個簡單的FromUri使用場景:
public class GeoPoint
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
public ValuesController : ApiController
{
public HttpResponseMessage Get([FromUri] GeoPoint location) { ... }
}
是爲之記。
Alva Chien
2016.6.24