我正在一个网站上,该网站将能够根据用户选择来过滤项目列表,就像您可以过滤亚马逊搜索的结果一样。我不确定如何建立一个可以接受许多不同参数的路由,而这些参数都不是必需的。
理想情况下,最终结果将类似于:
mysite.com/dothings/filter1/sometext/filter5/sometext/filter11/sometext
要么
mysite.com/dothings/filter1:sometext/filter5:sometext/filter11:sometext
对于这两种方式,我都不了解如何设置路由以处理随机过滤器/过滤器的随机排序。
目前我的代码是:
//the real code would have 10+ filters
[Route("filter1/{filter1}/filter2/{filter2}")]
public IActionResult DoThings(string filter1 = null, string filter2 = null)
{
return Ok("Test");
}
但是即使使用了可选参数,如果我忽略了
filter1
,也根本无法实现我的操作。对于这种类型的要求是否有通用的方法?
最佳答案
当您删除过滤器时,它不起作用的原因是因为您将过滤器作为路由的一部分。
如果您有filter1 = null; filter2 = "foo"
,则是以下情况:
期望:../filter1/{filter1}/filter2/{filter2}
实际:../filter1/filter2/foo
相反,您应该使用查询参数。然后查询将如下所示:
mysite.com/dothings?filter1=sometext&filter5=sometext&filter11=sometext
路线如下所示:
[Route("DoThings")]
public IActionResult DoThings(string filter1 = null, string filter2 = null)
{
return Ok("Test");
}
另外,由于您提到它将有10个以上的参数,因此建议您为过滤器创建一个类。例如:
public class MyFilters
{
public string filter1 { get; set; }
public string filter2 { get; set; }
...
}
[Route("DoThings")]
public IActionResult DoThings(MyFilters filters)
{
return Ok("Test");
}
以下是一些相关问题:
Designing a REST api by URI vs query string
REST API Best practices: Where to put parameters?
关于c# - MVC路由许多可选参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44268669/