簡體   English   中英

在 GET 請求上使用 MVC 在 RESTful API 中的何處/如何包含參數

[英]Where/how to include params in RESTful API using MVC on GET request

我正在嘗試構建一個盡可能符合 REST 原則的 API,但遇到了一些障礙。 我正在嘗試在 Azure Data Lake FileSystem(容器)上的目錄中獲取文件。 我已經構建了一個用於引用資源的 RESTful URI 結構,但我不確定如何適合幾個參數,特別是 DataLake 帳戶名稱和訪問密鑰; 進入請求 URI。 這就是我的意思:

我的控制器的工作版本如下所示(如您所見,有些項目是硬編碼的):

    [HttpGet("api/location/{locationId}/dates/{dateId}/files/{fileId}")]
    public IActionResult GetFile(string locationId, string dateId, string fileId)
    {
        var accountName = "my-hard-coded-Account";
        var key = "my-hard-coded-Key";
        return Ok(myDataLakeClient.GetFile($"{locationId}/{dateId}/{fileId}", accountName, key);
    }

由於我的服務需要與多個 DataLakes 對話,我需要收集請求中的帳戶和密鑰,所以我的下一個版本看起來像這樣:

[HttpGet("api/location/{locationId}/dates/{dateId}/files/{fileId}?accountName={accountName}&key={key}")]
public IActionResult GetFile(string locationId, string dateId, string fileId, string accountName, string key)
{
    return Ok(myDataLakeClient.GetFile($"{locationId}/{dateId}/{fileId}", accountName, key);
}

在第二種情況下,如果我打電話給:

GET localhost4200:http://localhost:51044/api/io/solutions?accountName=myAccount&key=myKey

我被一個錯誤打倒:

RoutePatternException: The literal section 'solutions?accountName=' is invalid. Literal sections cannot contain the '?' character.

我覺得我可以通過切換到 POST 請求並只在請求正文中包含密鑰和帳戶來解決這個問題,但這並不真正符合 REST 原則,因為 POST 應該用於創建資源,而 GET 應該用於請求資源。

您不需要在 HttpGet 屬性中將查詢字符串參數聲明為路由定義的一部分。 改成這樣:

[HttpGet("api/location/{locationId}/dates/{dateId}/files/{fileId}")]

您的查詢字符串參數仍將根據名稱與操作方法參數匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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