(四)ASP.NET Web API 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 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