C# 如果字符串参数为空,则调用错误的路由。正在寻找RESTAPI标准以避免这种情况

C# 如果字符串参数为空,则调用错误的路由。正在寻找RESTAPI标准以避免这种情况,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,控制器级 [Route("employee/members")] 方法(路线1) 方法(路线2) 情景1: 这将路由到路由1 场景2: 这将使用memberID=“memberSearch”路由到route2,这是错误的,因为搜索页面将尝试完全访问该方法 我知道我可以将路线2添加为 [Route("memberID/{memberID}")] 但这不是良好的Rest API标准更改您的路径,如下所示,以使搜索值可选: [HttpGet] [Route("memberSearch/{searc

控制器级

[Route("employee/members")]
方法(路线1)

方法(路线2)

情景1: 这将路由到路由1

场景2: 这将使用memberID=“memberSearch”路由到route2,这是错误的,因为搜索页面将尝试完全访问该方法

我知道我可以将路线2添加为

[Route("memberID/{memberID}")]

但这不是良好的Rest API标准

更改您的路径,如下所示,以使
搜索值
可选:

[HttpGet]
[Route("memberSearch/{searchValue?}")]
结果:

如下图所示更改路线,使
searchValue
可选:

[HttpGet]
[Route("memberSearch/{searchValue?}")]
结果:

因为您想要执行搜索,所以我通常会使用添加了查询参数name的基本路由 所以你可以做。使用查询参数将允许您在将来更灵活地进行搜索,例如添加分页

使用上述方法将允许您的路径不重叠,如果您希望使搜索路径更独特,只需将HttpGet属性更改为
[HttpGet(“search”)]
,从而


[ApiController]
[路线(“员工/成员”)]
公共类YourControllername:ControllerBase
{
[HttpGet]
公共IActionResult搜索([FromQuery]字符串名称){
//在此提供搜索功能
}
[HttpGet(“{memberID}”)]
公共IActionResult Get(字符串成员ID){
//这里有更多代码
}
}

因为您想要执行搜索,所以我通常会使用添加了查询参数name的基本路由 所以你可以做。使用查询参数将允许您在将来更灵活地进行搜索,例如添加分页

使用上述方法将允许您的路径不重叠,如果您希望使搜索路径更独特,只需将HttpGet属性更改为
[HttpGet(“search”)]
,从而


[ApiController]
[路线(“员工/成员”)]
公共类YourControllername:ControllerBase
{
[HttpGet]
公共IActionResult搜索([FromQuery]字符串名称){
//在此提供搜索功能
}
[HttpGet(“{memberID}”)]
公共IActionResult Get(字符串成员ID){
//这里有更多代码
}
}

为什么在没有提供
{searchValue}
的情况下调用?让我们假设用户犯了错误。您在UI层是对的,我将检查空字符串,但为了对话,并假设这些API公开给第三方进行调用。如果调用方不遵守API协议,那么得到“错误”的结果是一个完全合理的响应。为什么调用时不提供
{searchValue}
?让我们假设用户犯了错误。您在UI层是对的,我将检查空字符串,但为了对话,并假设这些API公开给第三方进行调用。如果调用方不遵守API协议,那么得到“错误”的结果是完全合理的响应。
[HttpGet]
[Route("memberSearch/{searchValue?}")]