基于属性的路由,具有不同名称的参数与变量 - aspnetcore

Kje*_*sen 2 c# swagger .net-core asp.net-core nswag

我需要这样做

[Route("/api/highfive/{person_name}")]
public IActionResult HighFive(string personName){
   //do stuff
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将变量 personName 映射到路由中作为 person_name 提供的内容?

只要路由参数和变量名匹配(这是有意义的),下面的两个选项就可以工作。

[Route("/api/highfive/{person_name}")]
public IActionResult HighFive(string person_name){
   //do stuff
}

[Route("/api/highfive/{personName}")]
public IActionResult HighFive(string personName){
   //do stuff
}
Run Code Online (Sandbox Code Playgroud)

但你为什么想要这个?

  • Swagger 生成的文档必须与之前的 API 相匹配,这正在替换 - 并且它使用路由中的变量名称来生成文档。

  • 使用 person_name 作为变量名违反了我们的命名约定

  • 是的,这有点愚蠢 - 但如果有一个我不知道的简单解决方案,那就太棒了。

Kir*_*kin 6

绑定源属性允许配置用于模型绑定的名称。在您的示例中,您从路由中获取值,这意味着您可以FromRoute在参数上使用该属性:

[FromRoute(Name="person_name")] string personName
Run Code Online (Sandbox Code Playgroud)