如何在 .Net Core 中有很多可选路由

How to have many optional routes in .Net Core

我怎样才能接受不同顺序和一些可选参数的请求?

https://localhost:44314/api/courses/page=2&pageSize=6&language=test&institution=test&area=test

https://localhost:44314/api/courses/page=2&pageSize=6&institution=test&area=test

https://localhost:44314/api/courses/page=2&pageSize=6&area=test&language=test

我试过如下:

[HttpGet]
[Route("page={page:int}&pageSize={pageSize:int}&language={language?}&institution={institution?}&area={area?}")]
public async Task<ActionResult<CourseViewModel>> ListCourses(int page, int pageSize, string language="", string institution="", string area="")

我的错误是:

System.ArgumentException: 'An optional parameter must be at the end of the segment. In the segment 'page={page}&pageSize={pageSize}&language={language?}&institution={institution?}&area={area?}', optional parameter 'language' is followed by '&institution='. Parameter name: routeTemplate'

删除路由模板,路由table将使用操作的参数通过请求的查询字符串匹配路由URL

//GET api/courses?page=2&pageSize=6&language=test&institution=test&area=test
//GET api/courses?page=2&pageSize=6&institution=test&area=test
//GET api/courses?page=2&pageSize=6&area=test&language=test
[HttpGet]
[Route("")]
public async Task<ActionResult<CourseViewModel>> ListCourses(int page, int pageSize, string language = "", string institution = "", string area = "")

在这种情况下,顺序无关紧要。一旦它们出现以进行匹配。