如何获得像/ API /libraries/1/books/2/dosomething这样的REST API路由?q=
本文关键字:API REST 路由 何获得 libraries books dosomething | 更新日期: 2023-09-27 18:03:46
我正在用。net WebAPI开发一个web服务,我很难弄清楚如何为我的REST API设置更复杂的路由方案。我有一些资源具有直接的多用户层次结构,我希望用户能够对其进行查询和执行操作。想象下面的理论场景:
我有一些图书馆,每个图书馆都有很多书,我可以借阅、获取信息或归还。用户应该能够通过我的REST API上的请求来执行这些操作。
设想以下GET请求,以获取ID为2的图书馆中ID为10的图书的信息:
/api/libraries/2/books/10
或者下面的GET请求来获取两个日期之间的结帐历史:
/api/libraries/2/books/10/getHistory?startTime=20130101120000&endTime=20140101120000
我如何配置路由在WebAPI能够有这样一个API结构?我设想了一个示例函数签名,如LibrariesController.cs
中的以下内容:
public IEnumerable<CheckoutTransaction> GetCheckoutHistory(long libraryId, long bookId, long startTime, long endTime);
我的WebApiConfig.cs文件很简单,包含以下内容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace ExperimentalService
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
如果你使用Web API 2,你可以使用属性路由。
"/api/libraries/2/books/10"
[HttpGet]
[Route("api/libraries/{libraryid}/books/{bookid}")]
public IHttpActionResult GetBook(int libraryId, int bookId)
{
// Code
}
"/api/libraries/2/books/10/getHistory?startTime=20130101120000&endTime=20140101120000"
[HttpGet]
[Route("api/libraries/{libraryid}/books/{bookid}/getHistory")]
public IHttpActionResult GetHistory(int libraryId, int bookId,
[FromUri] DateTime startTime,
[FromUri] DateTime endTime)
{
// Code
}
您还需要在路由映射之前在您的Web API配置中包括config.MapHttpAttributeRoutes();
来启用属性路由。