.NET Core控制器:如何在路由中接收多个参数
如何在.NET Core控制器中将take和skip参数通过路由传递
完全可以实现将take和skip通过路由传递,只需要修改控制器动作的路由模板,把这两个参数加入到路由规则中即可。
修改后的控制器动作代码
[HttpGet("{filename}/{take:int}/{skip:int?}")] public async Task<IActionResult> Get([FromRoute] string filename, [FromRoute] int take, [FromRoute] int skip = 0) { // process file }
关键说明:
路由模板调整:将原来的
[HttpGet("{filename}")]修改为[HttpGet("{filename}/{take:int}/{skip:int?}")]:{take:int}:指定take是整数类型的路由参数,强制要求传入有效值{skip:int?}:?表示该参数可选,配合方法中skip = 0的默认值,当请求中省略该参数时会自动使用默认值
参数绑定:给
take和skip加上[FromRoute]特性(虽然默认情况下路由参数会自动绑定,但显式声明更清晰,避免歧义)文件名路由约束:如果你的文件名包含点号(比如
myfilename.txt),默认路由解析可能会误将点号后的部分当成扩展名。可以给filename添加路由约束,确保它能正确捕获包含点号的文件名:[HttpGet("{filename:regex(^[^/]+$)}/{take:int}/{skip:int?}")]这个正则约束会匹配任何不包含斜杠的字符串,保证文件名被完整捕获。
测试请求示例
- 带
skip参数的请求:https://localhost:43845/File/myfilename.txt/10/1
此时filename为myfilename.txt,take为10,skip为1 - 省略
skip参数的请求:https://localhost:43845/File/myfilename.txt/10
此时skip会自动使用默认值0
内容的提问来源于stack exchange,提问作者CraftyFox
相关产品推荐
相关产品推荐

