如何设计多种调用RESTAPI的方法
我正在使用ASP.NET Web API。我想休息一下如何设计多种调用RESTAPI的方法,rest,asp.net-web-api,asp.net-web-api2,asp.net-web-api-routing,Rest,Asp.net Web Api,Asp.net Web Api2,Asp.net Web Api Routing,我正在使用ASP.NET Web API。我想休息一下 GET/api/v1/documents/1234/download或 GET/api/v1/documents/1234?act=download或 GET/api/v1/documents?id=1234&act=download 可以有多种方法调用RESTAPI Url吗?推荐吗 我仅使用属性路由 [RoutePrefix("api/v1")] public class DocumentController : ApiControll
GET/api/v1/documents/1234/download
或
GET/api/v1/documents/1234?act=download
或
GET/api/v1/documents?id=1234&act=download
可以有多种方法调用RESTAPI Url吗?推荐吗
我仅使用属性路由
[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);
}
}
[RoutePrefix(“api/v1”)]
公共类DocumentController:ApicController
{
私有只读域服务\u域服务;
公共文档控制器(域服务域服务)
:base(域服务)
{
_domainService=domainService??抛出新的ArgumentNullException(nameof(domainService));
}
[HttpGet]
[路由(“documents/{id:int}”)]
公共异步任务下载文档([FromUri]int-id,[FromUri]string-act)
{
if(string.IsNullOrEmpty(act)| | act.ToUpper()!=“下载”)
{
返回BadRequest(“无效的操作参数”);
}
返回等待服务。下载文件(id);
}
}
仅使用上述代码
GET/api/v1/documents/1234?act=download
works。是否可以将路由配置为所有3个路由都将调用相同的操作方法?您可以根据需要向每个方法添加任意多个路由属性。
因此,您可以对您的方法执行以下操作:
[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
就我个人而言,我认为这是相当冗长的,并会尽量坚持一个单一的风格(最后一个,如果我可以选择),但我想这可能取决于你的要求