應該對Routing有一些概念了吧!?還有另一種方式來為Controller內的方法來定義Routing,讓我們一起來看看吧!
這次,我們用(三)ASP.NET Web API 2 - Web API與Routing的互動 - 1的範例來做修改。
第一步:刪掉WebApiConfig.cs內原本已經定義好的Routing,刪光光。
public static void Register(HttpConfiguration config)
{
// Web API 設定和服務
// Web API 路由
config.MapHttpAttributeRoutes();
}
第二步:我們來看Controller,還記得我們寫了四個方法嗎?我們現在要為每個方法定義HTTP Action與Routing,如下:
[Route("api/candidates")]
[HttpGet]
public IEnumerable<Models.Candidate> GetAllCandidates()
{
return Candidates;
}
[Route("api/candidates/name/{name}")]
[HttpGet]
public IHttpActionResult GetCandidateByNamea(string Name)
{
var myCandidate = Candidates.FirstOrDefault((c) => c.Name == Name);
if (myCandidate == null)
return NotFound();
else
return Ok(myCandidate);
}
[Route("api/candidates/id/{id}")]
[HttpGet]
public IHttpActionResult GetCandidateById(string Id)
{
var myCandidate = Candidates.FirstOrDefault((c) => c.Id == Id);
if (myCandidate == null)
return NotFound();
else
return Ok(myCandidate);
}
[Route("api/candidates/{name}/{id}")]
[HttpGet]
public IHttpActionResult GetCandidateByNameaAndId(string Name, string Id)
{
var myCandidate = Candidates.FirstOrDefault((c) => c.Name == Name && c.Id == Id);
if (myCandidate == null)
return NotFound();
else
return Ok(myCandidate);
}
大家可以發現,在每個方法上加上了兩行程式:[Route("xxxxxxx")]與[HttpGet],前者,是用來定義該Web API方法的Routing,轉換方式與上一篇寫的一模一樣;後者是用來定義該方法的HTTP Action,當然還可以有POST、PUT、DELETE...等。
就這樣,我們完成了修改,所有功能與網頁前端呼叫的方法全部都一樣,一個字都不用改,是不是很簡單啊!這樣的設計不僅清楚明瞭,也很方便,一看就知道這個方法的Routing與HTTP Action。
範例下載連結:ASP.NET Web API 2 Practics02 - 2