如何处理单个 API 方法调用的多个可选参数?
How can I deal with multiple optional parameters for a single API method call?
我有一个方法可以传递三个参数的任意组合,并且所有参数都可以为空。我正在使用 c#,属性路由,这是一个 web API 项目。如果我为所有三个参数都传递一个值,或者如果我不传递任何参数,所有这些都可以正常工作。它是传递一个单一的参数,其身份根据事情变坏的数据本身并不明确。
请允许我举例说明:
我有以下内容:
[HttpGet]
[Route("SomePath/{varOne:bool?}/{varTwo:bool?}/{varThree:int?}")]
public async Task<IHttpActionResult> GetItems(bool? one, Bool? two, int? three){...}
只要我传入零个或所有参数,一切正常,当我只传入一个 bool 值时,问题就开始了。你看;该路由绝对没有办法知道传递给它的 bool 参数(varOne 或 varTwo),因此它假定它是第一个 - 不太有助于获取正确的数据。
求助!
在网上进行了一些简短的研究后,我了解到最好的做法是只有一个可选参数,并且推理或多或少与我在问题中描述的一致。由于您绝对无法知道其中的区别,因此请将其保留为一个。
顺便说一下,当我只传入最后一个参数时没有问题,那是因为它是一个 int,它清楚地知道传入的是哪个参数。
这是经过一些修改后的代码,现在可以正常工作了。
[HttpGet]
[Route("SomePath/{varOne:bool?}/{varTwo:bool?}/{varThree:int?}")]
[Route("SomePath/{varThree:int?}")]
[Route("SomePath/second/{varTwo:bool?}")]
public async Task<IHttpActionResult> GetItems(bool? one, Bool? two, int? three){...}
如你所见,我仍然使用单一方法来抓取所有内容,无论传入哪个参数;但是,我确实需要在路线中使用略有不同的 URL 才能实现这一目标。我确实注意到,如果我有三种不同的数据类型,我将能够摆脱单一的 URL。
因为这花了我一段时间才弄清楚,所以我觉得有必要把它放在那里。希望这对某人有所帮助。
我有一个方法可以传递三个参数的任意组合,并且所有参数都可以为空。我正在使用 c#,属性路由,这是一个 web API 项目。如果我为所有三个参数都传递一个值,或者如果我不传递任何参数,所有这些都可以正常工作。它是传递一个单一的参数,其身份根据事情变坏的数据本身并不明确。
请允许我举例说明:
我有以下内容:
[HttpGet]
[Route("SomePath/{varOne:bool?}/{varTwo:bool?}/{varThree:int?}")]
public async Task<IHttpActionResult> GetItems(bool? one, Bool? two, int? three){...}
只要我传入零个或所有参数,一切正常,当我只传入一个 bool 值时,问题就开始了。你看;该路由绝对没有办法知道传递给它的 bool 参数(varOne 或 varTwo),因此它假定它是第一个 - 不太有助于获取正确的数据。
求助!
在网上进行了一些简短的研究后,我了解到最好的做法是只有一个可选参数,并且推理或多或少与我在问题中描述的一致。由于您绝对无法知道其中的区别,因此请将其保留为一个。
顺便说一下,当我只传入最后一个参数时没有问题,那是因为它是一个 int,它清楚地知道传入的是哪个参数。
这是经过一些修改后的代码,现在可以正常工作了。
[HttpGet]
[Route("SomePath/{varOne:bool?}/{varTwo:bool?}/{varThree:int?}")]
[Route("SomePath/{varThree:int?}")]
[Route("SomePath/second/{varTwo:bool?}")]
public async Task<IHttpActionResult> GetItems(bool? one, Bool? two, int? three){...}
如你所见,我仍然使用单一方法来抓取所有内容,无论传入哪个参数;但是,我确实需要在路线中使用略有不同的 URL 才能实现这一目标。我确实注意到,如果我有三种不同的数据类型,我将能够摆脱单一的 URL。
因为这花了我一段时间才弄清楚,所以我觉得有必要把它放在那里。希望这对某人有所帮助。