Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.Net Core中有许多可选路由_C#_Asp.net Core_Asp.net Core Mvc_Asp.net Core Routing - Fatal编程技术网

C# 如何在.Net Core中有许多可选路由

C# 如何在.Net Core中有许多可选路由,c#,asp.net-core,asp.net-core-mvc,asp.net-core-routing,C#,Asp.net Core,Asp.net Core Mvc,Asp.net Core Routing,我如何才能以不同的顺序和一些可选参数接受请求 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

我如何才能以不同的顺序和一些可选参数接受请求

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="")
[HttpGet]
[Route(“page={page:int}&pageSize={pageSize:int}&language={language?}&institution={institution?}&area={area?}”)]
公共异步任务列表课程(int-page,int-pageSize,string-language=“”,string-institution=“”,string-area=“”)
我的错误是:

System.ArgumentException:'可选参数必须位于段的末尾。在该部分 'page={page}&pageSize={pageSize}&language={language?}&institution={institution?}&area={area?}', 可选参数“language”后跟“&institution=”。 参数名称:routeTemplate'


删除路由模板,路由表将使用操作的参数通过请求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 = "")
//获取api/courses?page=2&pageSize=6&language=test&institution=test&area=test
//获取api/课程?页面=2&pageSize=6&institution=test&area=test
//获取api/课程?页面=2&pageSize=6&area=test&language=test
[HttpGet]
[路线(“”)
公共异步任务列表课程(int-page,int-pageSize,string-language=“”,string-institution=“”,string-area=“”)

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

通常,路由模板只应用于匹配URI路径(即,由/)分隔的部分),而不是URI查询(即,由&分隔的部分),因为前者通常具有固定的顺序,但后者不应该。您是对的,添加了“?”它改变了一切。url上缺少它。