详解ASP.NET WEB API 之属性路由
什么是属性路由?
ASP.NET WEB API 是一种开发 Web API 的框架。它主要通过控制器和方法来定义和处理 HTTP 请求。而属性路由是一种通过属性来处理 HTTP 请求的方式。属性路由是 ASP.NET WEB API 2 中的新功能,它允许我们在控制器和方法上使用基于属性的 URL 映射规则。通过属性路由,我们可以轻松地将 URL 映射到 Web API 方法中。
如何使用属性路由?
首先,我们需要在 WebApiConfig.cs 中启用属性路由:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
// other configuration code
}
接下来,在我们的控制器或方法上添加路由属性:
[RoutePrefix("api/cars")]
public class CarsController : ApiController
{
// GET api/cars
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "Car1", "Car2" };
}
// GET api/cars/5
[HttpGet("{id}")]
public string Get(int id)
{
return "Car" + id.ToString();
}
// POST api/cars
[HttpPost]
public void Post([FromBody]string value)
{
}
// PUT api/cars/5
[HttpPut("{id}")]
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/cars/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
在上面的代码中,我们将控制器命名为 CarsController
,并设置 RoutePrefix
属性为 api/cars
,这意味着所有的方法都将使用 api/cars
作为前缀。接着,我们在各自的方法上使用了不同的路由属性标记,比如 [HttpGet]
用于指定处理 GET 请求、[HttpPost]
用于指定处理 POST 请求等。
示例说明
假设我们有一个电影网站,需要提供电影列表和电影详情的 API。我们可以按以下方式使用属性路由:
[RoutePrefix("api/movies")]
public class MoviesController : ApiController
{
private readonly List<Movie> _movies = new List<Movie>
{
new Movie { Id = 1, Name = "The Godfather", Director = "Francis Ford Coppola", Year = 1972 },
new Movie { Id = 2, Name = "The Shawshank Redemption", Director = "Frank Darabont", Year = 1994 },
new Movie { Id = 3, Name = "The Dark Knight", Director = "Christopher Nolan", Year = 2008 },
new Movie { Id = 4, Name = "The Godfather: Part II", Director = "Francis Ford Coppola", Year = 1974 }
};
[HttpGet]
[Route("")]
public IHttpActionResult GetAllMovies()
{
return Ok(_movies);
}
[HttpGet]
[Route("{id:int}")]
public IHttpActionResult GetMovieById(int id)
{
var movie = _movies.FirstOrDefault(m => m.Id == id);
if (movie == null)
{
return NotFound();
}
return Ok(movie);
}
}
在上面的代码中,我们设置了 /api/movies
作为所有方法的路由前缀,并在方法上使用了 [HttpGet]
和 [Route]
标记来指定处理 GET 请求和路由。我们使用 "api/movies" 作为路由前缀并在 GetAllMovies 方法上使用空字符串设置根的路由,这样我们可以轻松地从 "/api/movies" 路径获取所有的电影列表。我们还在 GetMovieById 上使用了一个可选参数 id
,并设置了 {id:int}
作为路由,这样我们可以轻松地从 "/api/movies/1" 路径获取有关 ID 为 1 的电影的详细信息,因为我们将其绑定到命名参数 id 上。
另一个示例是获取最受欢迎电影列表:
[HttpGet]
[Route("top")]
public IHttpActionResult GetTopMovies(int count = 5)
{
var topMovies = _movies
.OrderByDescending(m => m.Year)
.ThenBy(m => m.Name)
.Take(count)
.ToList();
return Ok(topMovies);
}
在这个示例代码中,我们使用 Route 属性标记,指定 URL 路径为 /api/movies/top,然后编写了一个 GetTopMovies 方法用于返回最受欢迎电影列表。我们为方法添加了一个可选参数 count,并将其默认值设置为 5。这样,我们可以通过向 /api/movies/top?count=10 发送 GET 请求,可以获取排名前 10 的电影列表。
总之,属性路由是一种方便的方式来为我们的 Web API 提供映射,我们可以轻松地将 URL 映射到我们的方法中,这样我们可以更好地控制和管理我们的 API。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解ASP.NET WEB API 之属性路由 - Python技术站