[英]How to design multiple ways to invoke REST API
我正在使用ASP.NET Web API。 我想REST uri成为
GET /api/v1/documents/1234/download
或
GET /api/v1/documents/1234?act=download
或
GET /api/v1/documents?id=1234&act=download
可以有多种方法来调用REST API网址吗? 推荐吗?
我仅使用Attribute Routes
[RoutePrefix("api/v1")]
public class DocumentController : ApiController
{
private readonly DomainService _domainService;
public DocumentController(DomainService domainService)
: base(domainService)
{
_domainService = domainService ?? throw new ArgumentNullException(nameof(domainService));
}
[HttpGet]
[Route("documents/{id:int}")]
public async Task<IHttpActionResult> DownloadDocument([FromUri]int id, [FromUri]string act)
{
if (string.IsNullOrEmpty(act) || act.ToUpper() != "DOWNLOAD")
{
return BadRequest("Invalid action parameter.");
}
return await service.DownloadFile(id);
}
}
使用上述代码,只有GET /api/v1/documents/1234?act=download
可以使用。 是否可以通过所有3条路由都调用相同操作方法的方式来配置路由?
您可以根据需要向每个方法添加任意数量的Route
属性。
因此,您可以对自己的方法执行此操作:
[Route("documents")] // matches /documents?id=123&act=download
[Route("documents/{id:int}")] // matches /documents/123?act=download
[Route("documents/{id:int}/{act}")] // matches /documents/123/download
我个人认为这是一个漫长的过程,会尝试坚持一种样式(如果可以的话,请选择最后一种样式),但是我想这可能取决于您的要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.