我有一个方法可以传递三个参数的任意组合,并且所有这些参数都可以为空。我正在使用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)被传递给它,因此它假设它是第一个 - 不太可能有助于获得正确的数据。
救命啊!
答案 0 :(得分:0)
经过一些网上简短的研究,我接受了教育,最好的做法是只有一个SINGLE可选参数,而且推理或多或少与我在问题中所描述的一致。由于绝对没有办法让你知道差异,所以要保持一致。
顺便说一句,当我传入最后一个参数时,我没有任何问题,这是因为它是一个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。
因为这需要我一段时间才能伸直,我觉得有必要把它拿出来。希望这有助于某人。