簡體   English   中英

如何設計多種方式來調用REST API

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM