C# 在GET请求时使用MVC在RESTful API中包含参数的位置/方式

C# 在GET请求时使用MVC在RESTful API中包含参数的位置/方式,c#,rest,asp.net-core,asp.net-core-mvc,C#,Rest,Asp.net Core,Asp.net Core Mvc,我正试图构建一个尽可能遵守REST原则的API,但遇到了一些障碍。我正在尝试获取Azure Data Lake文件系统(容器)目录中的文件。我已经构建了一个用于引用资源的RESTful URI结构,但我不确定如何准确地放入几个参数,特别是DataLake帐户名和访问密钥;进入请求URI。我的意思是: 我的控制器的工作版本如下所示(如您所见,某些项目是硬编码的): 由于我的服务需要与多个DataLake对话,我需要收集帐户并输入请求,因此我的下一个版本如下所示: [HttpGet("ap

我正试图构建一个尽可能遵守REST原则的API,但遇到了一些障碍。我正在尝试获取Azure Data Lake文件系统(容器)目录中的文件。我已经构建了一个用于引用资源的RESTful URI结构,但我不确定如何准确地放入几个参数,特别是DataLake帐户名和访问密钥;进入请求URI。我的意思是:

我的控制器的工作版本如下所示(如您所见,某些项目是硬编码的):

由于我的服务需要与多个DataLake对话,我需要收集帐户并输入请求,因此我的下一个版本如下所示:

[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);
}
在第二种情况下,如果我打电话给:

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

我犯了一个错误:

RoutePatternexException:文本部分“solutions?accountName=”无效。文字部分不能包含“?”字符。


我觉得我可以通过切换到POST请求并在请求主体中包含密钥和帐户来解决这个问题,但这并不真正符合REST原则,因为POST应该用于创建资源,和GET应用于请求资源。

您不需要在HttpGet属性中声明查询字符串参数作为路由定义的一部分。将其更改为:

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

您的查询字符串参数仍将根据其名称与操作方法参数匹配。

您不需要在HttpGet属性中将查询字符串参数声明为路由定义的一部分。将其更改为:

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

您的查询字符串参数仍将根据其名称与操作方法参数匹配。

@mason谢谢,这就成功了。“如果你想把这句话变成一个答案,我很乐意接受。”梅森:谢谢,这就成功了。如果你想把这一点作为答案,我很乐意接受。