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