(四)ASP.NET Web API 2 - Web API與Routing的互動 - 2

應該對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