ASP 网络核心属性路由和双正斜杠
ASP Net Core Attribute routing and double forward slash
正如所指出的 here,在 URL 中使用双斜杠是有效的。
我有一个使用属性路由的 ASP Net Core 项目,一个名为 GroupController
的控制器用于处理 Group
上的操作,以及一个用于 PUT
ting 的操作 RulePart
个组,由 string
类型的 ImportId
指定。
[Route("/api/[controller]")]
public class GroupController : ControllerBase
{
[HttpPut("{groupImportId?}/ruleParts")]
public async Task<IActionResult> PutRuleParts(string groupImportId, [FromBody]List<RulePartDto> ruleParts)
{
return null; //actual code ommitted for brevity
}
}
一个 URL 像 http://localhost/api/group/groupImportId/ruleParts
符合预期。
我希望 null groupImportId
s,即像 http://localhost/api/group//ruleParts
这样的 URLs 会调用相同的操作,因为 groupImportId
路由参数已被标记为可选.但是,当尝试调用此 URL 时,出现 404 错误并且未命中操作。
是否有可能在 ASP Net Core 中匹配一个空的 URL 路径段?
不要在路由模板中间使用可选参数。
应该在 URL 的末尾使用可选参数。当省略中间段中嵌入的可选参数时,路由将不匹配,因为这将导致未找到错误。
相反,属性路由允许将多个路由映射到同一操作。
[HttpPut("ruleParts")] // PUT api/group/ruleParts
[HttpPut("{groupImportId}/ruleParts")] //PUT api/group/123456/ruleParts
public async Task<IActionResult> PutRuleParts([FromBody]List<RulePartDto> ruleParts, string groupImportId = null) {
//...
}
操作的 groupImportId
参数是可选的,以允许在请求其他路由时在 URL 中省略可选参数。
正如所指出的 here,在 URL 中使用双斜杠是有效的。
我有一个使用属性路由的 ASP Net Core 项目,一个名为 GroupController
的控制器用于处理 Group
上的操作,以及一个用于 PUT
ting 的操作 RulePart
个组,由 string
类型的 ImportId
指定。
[Route("/api/[controller]")]
public class GroupController : ControllerBase
{
[HttpPut("{groupImportId?}/ruleParts")]
public async Task<IActionResult> PutRuleParts(string groupImportId, [FromBody]List<RulePartDto> ruleParts)
{
return null; //actual code ommitted for brevity
}
}
一个 URL 像 http://localhost/api/group/groupImportId/ruleParts
符合预期。
我希望 null groupImportId
s,即像 http://localhost/api/group//ruleParts
这样的 URLs 会调用相同的操作,因为 groupImportId
路由参数已被标记为可选.但是,当尝试调用此 URL 时,出现 404 错误并且未命中操作。
是否有可能在 ASP Net Core 中匹配一个空的 URL 路径段?
不要在路由模板中间使用可选参数。
应该在 URL 的末尾使用可选参数。当省略中间段中嵌入的可选参数时,路由将不匹配,因为这将导致未找到错误。
相反,属性路由允许将多个路由映射到同一操作。
[HttpPut("ruleParts")] // PUT api/group/ruleParts
[HttpPut("{groupImportId}/ruleParts")] //PUT api/group/123456/ruleParts
public async Task<IActionResult> PutRuleParts([FromBody]List<RulePartDto> ruleParts, string groupImportId = null) {
//...
}
操作的 groupImportId
参数是可选的,以允许在请求其他路由时在 URL 中省略可选参数。